ng build找不到模块

时间:2019-12-03 15:09:43

标签: node.js angular typescript npm

我正在尝试通过更新从其package.json文件中提取它们的位置来本地测试3个节点模块。模块是sdkng-widget-libfrontendng-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 --prodng build时,它在导入@locals/ng-widget-lib的文件中失败,并显示错误

  

错误TS2307:找不到模块'@ locals / ng-widget-lib'。

我已删除node_modules并运行npm cache clean --force,但仍然是相同的错误。 ng-widget-libfrontend使用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
  }
}

3 个答案:

答案 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"
    },
  }