Node.js ng生成找不到模块
我试图通过更新3个节点模块在Node.js ng生成找不到模块,node.js,angular,typescript,npm,Node.js,Angular,Typescript,Npm,我试图通过更新3个节点模块在package.json文件中的位置来本地测试3个节点模块。模块包括sdk、ng小部件库和frontendng小部件库依赖于sdk,frontend依赖于ng小部件库。我使用babel本地构建sdk。我将verdaccio作为本地npm注册表运行 我更新ng widget/package.json(repo/根目录的名称是ng widget而不是ng widget lib),将名称更改为@locals/ng widget lib,并将sdk依赖项指向本地sdk目录。然
package.json
文件中的位置来本地测试3个节点模块。模块包括sdk
、ng小部件库
和frontend
ng小部件库
依赖于sdk
,frontend
依赖于ng小部件库
。我使用babel
本地构建sdk
。我将verdaccio作为本地npm注册表运行
我更新ng widget/package.json
(repo/根目录的名称是ng widget
而不是ng widget lib
),将名称更改为@locals/ng widget lib
,并将sdk
依赖项指向本地sdk
目录。然后使用成功运行的ng build
运行npm安装和生成。然后我将dist/package.json
中的名称更改为@locals/ng widget lib
,并发布到本地注册表
在frontend/package.json
中,我将ng widget lib
依赖项指向@locals/ng widget lib
(我已尝试将其指向本地目录,但未使用本地注册表,但这仍然不起作用)。我运行npm install
,将模块从本地注册表下载到node_modules/@locals/ng widget lib
,并创建一个package lock.json
,其中ng widget lib
指向本地注册表。然后,当我运行ng build--prod
或ng build
时,它在导入@locals/ng widget lib
的文件中失败,并出现错误
错误TS2307:找不到模块'@locals/ng widget lib'
我已经删除了node\u模块
并运行了npm cache clean--force
,但仍然存在相同的错误。ng小部件库
和frontend
使用angular 8,sdk
是typescript。我正在使用npm 6.11.3
这是我的tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true
}
}
尝试使用编译器选项preserveSymlinks 所有本地模块都必须用作编译器选项中的保留符号链接
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"preserveSymlinks": true
阅读更多:
我遵循这一点,成功导入了本地模块。我将ngPackage
配置直接放在package.json
中,而且我也不必运行npmpack
。这是我在package.json中的配置
"ngPackage": {
"lib": {
"entryFile": "./projects/ng-widget-lib/src/public_api.ts"
},
"whitelistedNonPeerDependencies": [
"angular",
"rxjs",
"tslib",
"zone.js"
]
}
在从本地注册表安装之后,我还能够让它进行构建。我遵循了这一点。基本上,有一个用于构建角度库的特殊命令需要运行ng generate library my lib
,然后您必须从dist/
文件夹而不是根文件夹进行发布。在我的例子中,添加一个文件index.ts
作为同级(紧挨着)package.json
非常有效
- 仅使用
index.ts
从public\u api.ts
导出所有内容
- 将
entryFile
位置从public\u api.ts
替换为index.ts
index.ts
内的内容如下:
因此,ng packgr
的内容如下:
不起作用,它实际上是将模块从下载到我的node\u modules
目录中,所以我不认为它使用的是sym linku没有提到这一点。一旦需要在应用程序的启动中启动,所有缓存都将完成。您不能修改“要求异步”。需要的是块和同步。在节点js中,动态需求是不可能的,只有web u可以执行动态导入。使用webpack、system.js等工具
export * from './src/public_api.ts';
"ngPackage": {
"lib": {
"entryFile": "index.ts"
},
}