我不敢相信互联网上和 NativeScript 官方文档中都没有提到这一点。
您如何在 Web 应用程序和本机应用程序之间共享导入?
在本机环境中运行应用程序时,以下内容有效npm run android
:
import {App} from '~/app/shared/constants/app.constant';
但是,如果我用 ng serve 运行它以在浏览器中运行我的应用程序,它会说
找不到模块“~/app/shared/constants/app.constant”。
如果我尝试在 tsconfig.json 中定义自定义路径:
"paths": {
"~/*": [
"src/*"
],
"*": [
"./node_modules/tns-core-modules/*",
"./node_modules/*"
],
"@components/*": ["src/app/shared/components/*"],
"@constants/*": ["src/app/shared/constants/*"]
}
然后做:
import {App} from '@constants/app.constant';
运行这个可以ng serve
工作,但猜猜看,当使用 npm run android 运行应用程序时它不起作用。
您无法检查您在哪个平台上运行并决定导入的外观,因为由于同一文件在同一个文件中被导入两次,您会收到“重复导入”错误。
在我发疯之前有人可以帮助我吗?
编辑:
我运行了这个命令来生成项目:
ng new -c=@nativescript/schematics foo-project --shared --style=scss
如此处所述。
这是tsconfig.json
:
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom",
"es6",
"es2015.iterable"
],
"baseUrl": ".",
"paths": {
"~/*": [
"src/*"
],
"*": [
"./node_modules/tns-core-modules/*",
"./node_modules/*"
],
"@components/*": ["src/app/shared/components/*"],
"@constants/*": ["src/app/shared/constants/*"]
}
},
"exclude": [
"**/*.tns.ts",
"**/*.android.ts",
"**/*.ios.ts",
"**/*.spec.ts"
]
}