我不敢相信互联网上或官方的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
如here所述。
这是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"
]
}