TypeScript - 导入外部 npm 模块会导致 tsc 的输出文件夹更改
Posted
技术标签:
【中文标题】TypeScript - 导入外部 npm 模块会导致 tsc 的输出文件夹更改【英文标题】:TypeScript - Importing external npm module causes tsc's output folder to change 【发布时间】:2016-12-22 04:47:53 【问题描述】:我设置了一个 TypeScript 项目来将生成的 javascript 文件构建到 ./src/。在针对现有的 npm 模块进行构建时,这非常有效(这是一个 Angular 2 项目,因此需要导入这些模块,但我认为在这种情况下这并不重要)。
当我安装一个特定的 npm 模块(我是作者 ng2-dynamic-dialog)并从该模块导入任何内容时,tsc 突然将 JavaScript 构建到不同的文件夹(而不是构建到 ./src/,它现在是构建到 ./src/src/) 并且它还在 ./src/ 中复制 node_modules 文件夹,其中仅包含 ng2-dynamic-dialog。
这可能不是一个很好的解释,所以这里有一个例子 https://github.com/leewinder/ng2-dynamic-dialog (Sha - 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 包的源代码与上述相同,但在开发文件夹中。
任何帮助都将不胜感激,因为我现在正用头撞砖墙。
【问题讨论】:
【参考方案1】:导入外部 npm 模块会导致 tsc 的输出文件夹发生变化
使用compilerOptions.baseDir
选项锁定基本目录,而不是被魔法确定。
【讨论】:
无法识别 baseDir,但能识别 compilerOptions.rootDir。将 rootDir 设置为 src/,removing compilerOptions.outDir 似乎已经解决了这个问题。将 outDir 设置为 anything 会导致与 OP 中描述的问题相同。以上是关于TypeScript - 导入外部 npm 模块会导致 tsc 的输出文件夹更改的主要内容,如果未能解决你的问题,请参考以下文章
如何将 typescript npm 模块导入语法转换为 ECMA2015 模块导入语法
如何使用 typescript / gulp / browserify 导入 npm 模块
Typescript - 内部模块中的导入声明不能引用外部模块
将 npm 链接的 React JSX 项目/模块导入 AngularJS TypeScript 模块不起作用