Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js ng生成找不到模块_Node.js_Angular_Typescript_Npm - Fatal编程技术网

Node.js ng生成找不到模块

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目录。然

我试图通过更新3个节点模块在
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"
    },
  }