2016-08-15 167 views
0

我有一个TypeScript项目,可以将生成的JavaScript文件生成为./src/。这在对现有的npm模块构建时非常合适(它是一个Angular 2项目,因此可以导入这些模块,但在这种情况下我认为不重要)。当我安装一个特定的npm模块(ng2-dynamic-dialog,其中我是作者)并从该模块导入任何东西时,tsc突然将JavaScript构建到不同的文件夹(而不是将其构建到./src/,现在正在构建到./src/src/),它还在./src/中创建了一个node_modules文件夹的副本,其中只包含ng2-dynamic-dialog。TypeScript - 导入外部npm模块导致tsc的输出文件夹发生变化

这可能不是一个伟大的explination所以这里有个例子 https://github.com/leewinder/ng2-dynamic-dialog(SHA - 8ef439d6)如果克隆的开发分支,在./samples运行TSC你会看到

的JS文件正确构建到./src。如果打开src/samples/samples.component.ts并取消注释'ng2-dynamic-dialog'中的'import {Ng2DynamicDialogComponent}'行;''并再次运行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包的源代码与上述相同,但在开发文件夹中。

任何帮助将被认真赞赏,因为我现在正在对着砖墙撞我的头。

回答

2

导入外部NPM模块使TSC的输出文件夹改变

使用compilerOptions.baseDir选项在基目录,而不是它被确定神奇锁定。

+0

未识别baseDir,但确实识别到compilerOptions.rootDir。将rootDir设置为src /,而_removing_ compilerOptions.outDir似乎解决了这个问题。将_Dir设置为_anything_导致与OP中所述相同的问题。 –