Javascript 角度cli编译错误+;monorepo:错误TS2451:无法重新声明块作用域变量';ngDevMode';
我有一个包含两个包的monorepo。一个是主应用程序,我们称之为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
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的符号链接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/...';