Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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
Javascript 角度cli编译错误+;monorepo:错误TS2451:无法重新声明块作用域变量';ngDevMode';_Javascript_Angular_Typescript_Angular Cli - Fatal编程技术网

Javascript 角度cli编译错误+;monorepo:错误TS2451:无法重新声明块作用域变量';ngDevMode';

Javascript 角度cli编译错误+;monorepo:错误TS2451:无法重新声明块作用域变量';ngDevMode';,javascript,angular,typescript,angular-cli,Javascript,Angular,Typescript,Angular Cli,我有一个包含两个包的monorepo。一个是主应用程序,我们称之为app,另一个是主应用程序使用的共享库,我们称之为lib。两者都是类型脚本/角度项目 我的文件夹结构如下所示: monorepo/ packages/ app/ lib/ 我正在尝试配置app项目,以便当它看到来自lib包的导入时,而不是转到node\u modules我希望它从构建lib包转到输出目录。因此,在我的tsconfig.json中: { "compilerOptions": { "b

我有一个包含两个包的monorepo。一个是主应用程序,我们称之为
app
,另一个是主应用程序使用的共享库,我们称之为
lib
。两者都是类型脚本/角度项目

我的文件夹结构如下所示:

monorepo/
  packages/
    app/
    lib/
我正在尝试配置
app
项目,以便当它看到来自
lib
包的导入时,而不是转到
node\u modules
我希望它从构建
lib
包转到输出目录。因此,在我的
tsconfig.json
中:

{
  "compilerOptions": {
    "baseUrl": ".",
    "rootDir": ".",
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": ["es7", "dom"],
    "mapRoot": "./",
    "module": "es2015",
    "moduleResolution": "node",
    "outDir": "../dist/out-tsc",
    "sourceMap": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "paths": {
      "lib/*": ["../lib/dist/*"]
    }
}
但是,当我尝试在
app
文件夹中运行
ng build
时,会收到以下错误消息(相同的错误两次,来自两个不同的位置):


就像它尝试加载Angular两次一样,一次从
app
目录加载,另一次从
lib
目录加载。

正如您所建议的,它确实尝试加载Angular两次。 有两种解决方案:

解决方案1:强制使用应用程序中定义的角度版本。在应用程序中,在tsconfig.json的“path”属性中,添加以下行。它强制使用位于应用程序节点_模块中的角度库(根据项目调整相对路径)

解决方案2:在应用程序中创建指向库的符号链接

  • 构建您的库,您的库现在构建在
    my lib文件夹\dist\my lib
  • 转到你的应用程序文件夹
  • 执行
    npm安装..\my lib folder\dist\my lib
    。这将在应用程序的node_模块中创建一个指向libdist的符号链接
  • 编辑tsconfig.json并向库的dist添加路径
  • 在这两种情况下,请检查您的导入:

    OK  : import {MyLibModule} from 'my-lib/';
    NOK : import {MyLibModule} from '../my-lib-folder/my-lib/...';
    

    在后一种情况下,角度版本仍将从导入位置相对加载。

    找到解决方案吗?
    "paths": {
      ...
      "@angular: ["../node_modules/@angular"],
      ...
    
    "paths": {
      ...
      "my-lib": ["dist.my-lib"]
      ...
    
    OK  : import {MyLibModule} from 'my-lib/';
    NOK : import {MyLibModule} from '../my-lib-folder/my-lib/...';