我设置了一个 TypeScript 项目,用于将生成的 JavaScript 文件构建到 ./src/。当针对现有的 npm 模块构建时,这工作得非常好(这是一个 Angular 2 项目,因此导入这些模块,但我认为在这种情况下这并不重要)。
当我安装特定的 npm 模块(ng2-dynamic-dialog,我是其作者)并从该模块导入任何内容时,tsc 突然将 JavaScript 构建到另一个文件夹(而不是构建到 ./src/,现在是构建到 ./src/src/),它还会在 ./src/中创建一个仅包含 ng2-dynamic-dialog 的 node_modules 文件夹的副本。
这可能不是一个很好的解释,所以这里有一个例子 https://github.com/leewinder/ng2-dynamic-dialog (沙 - 8ef439d6)
如果您克隆开发分支,并在 ./samples 中运行 tsc,您将看到 JS 文件已正确构建到 ./src。如果打开 src/samples/samples.component.ts 并取消注释行 'import { Ng2DynamicDialogComponent } from 'ng2-dynamic-dialog';'再次运行 tsc,您将看到 src/现在包含 ./src/src 和 ./src/node_modules
我的 tsconfig.json 设置如下
{
"compilerOptions": {
"target": "es5",
"outDir": "src/",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"watch": true,
"diagnostics": true,
"listFiles": true
}
}
如果我将“outDir”更改为 ./,则不会再发生此重复文件夹问题,但为什么引用此单个 npm 包会导致此问题?
无论我是否将 NPM 模块添加到 systemjs.config.js 中,都会发生此问题,因此它似乎与此无关。
我只能假设我的配置或 npm 包有问题,但 npm 包看起来没问题。
npm 包的源代码位于与上面相同的存储库中,但位于开发文件夹中。
任何帮助将不胜感激,因为我现在正在把头撞到砖墙上。
最佳答案
Importing external npm module causes tsc's output folder to change
使用compilerOptions.baseDir
选项锁定基本目录,而不是神奇地确定它。
关于javascript - TypeScript - 导入外部 npm 模块会导致 tsc 的输出文件夹发生更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964248/