我正在尝试通过更新从其package.json
文件中提取它们的位置来本地测试3个节点模块。模块是sdk
,ng-widget-lib
和frontend
。 ng-widget-lib
取决于sdk
,而frontend
取决于ng-widget-lib
。我使用sdk
在本地构建babel
。我正在将verdaccio作为本地npm注册表运行。
我更新ng-widget/package.json
(存储库/根目录的名称为ng-widget
而不是ng-widget-lib
),将其名称更改为@locals/ng-widget-lib
,并指向sdk
依赖项到本地sdk
目录。然后运行npm install并使用成功运行的ng build
进行构建。然后,我将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_modules
并运行npm cache clean --force
,但仍然是相同的错误。 ng-widget-lib
和frontend
使用8号角,sdk
是打字稿。我正在使用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
}
}
答案 0 :(得分:0)
尝试使用编译器选项preserveSymlinks。
所有本地模块都必须用作编译器选项中的preserveSymlinks
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"preserveSymlinks": true
了解更多: https://www.typescriptlang.org/docs/handbook/compiler-options.html
答案 1 :(得分:0)
我遵循了这个https://stackoverflow.com/a/48150290/3614578并且能够成功导入本地模块。我将ngPackage
配置直接放在package.json
中,而且我也不必运行npm pack
。这是我在package.json
"ngPackage": {
"lib": {
"entryFile": "./projects/ng-widget-lib/src/public_api.ts"
},
"whitelistedNonPeerDependencies": [
"angular",
"rxjs",
"tslib",
"zone.js"
]
}
从本地注册表安装后,我也能够将其构建。我遵循了这个https://github.com/angular/angular-cli/wiki/stories-create-library。基本上,有一个特殊的命令用于构建角度库,需要运行ng generate library my-lib
,然后您必须从dist/<lib-name>
文件夹而不是根文件夹进行发布。
答案 2 :(得分:0)
就我而言,添加一个文件 index.ts
作为兄弟(旁边)package.json
就像一个魅力。
public_api.ts
导出 index.ts
中的所有内容entryFile
位置从 public_api.ts
替换为 index.ts
index.ts
中的内容如下:
export * from './src/public_api.ts';
<块引用>
所以 ng-packgr
的内容如下:
"ngPackage": {
"lib": {
"entryFile": "index.ts"
},
}