我有以下文件夹结构
dist
src
module1
m1.ts
module2
m2.ts
.tsconfig.json
...
我已将tsc
配置为输出到dist/js
,因此在运行npm run tsc
后,我有以下内容:
dist
js
module1
m1.js
module2
m2.js
src
...
经过多次努力,我设法将ng-bootstrap
集成到我的项目中。
如果我import
来自我应用中的ng2-bootstrap
某处,例如:
import { ACCORDION_DIRECTIVES } from 'ng2-bootstrap/components/accordion';
并运行npm run tsc
我的文件夹结构更改为:
dist
js
node_modules
ng2-bootstrap
components
accordian
...
src
module1
m1.js
module2
m2.js
src
....
为什么会这样?
我在<script src="/vendor/ng2-bootstrap/bundles/ng2-bootstrap.js"></script>
index.html
我能用angular2做到这一点
<script src="/vendor/angular2/bundles/angular2.dev.js"></script>
和
import {Component} from 'angular2/core'
并且这不会创建dist/js/node_modules/angular2
文件夹
更新
这是我的tsconfig.json
的内容{
"compilerOptions": {
"target": "ES5",
"outDir": "./dist/js",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"dist",
"typings/main",
"typings/main.d.ts"
]
}
答案 0 :(得分:2)
我找到了解决方案。显然,源.ts
文件与.d.ts
位于同一目录中。因此它编译这些文件。 (我在前面的某处读到了这个,我不确定推理/为什么会发生这种情况)但是,解决办法是删除.ts
中的所有*.d.ts
igoring node_modules/ng2-bootstrap
文件
我创建了node script
来执行此操作:
// ./scripts/hack-remove-files.js
var fs = require('fs-extra')
var glob = require("glob");
var options = { ignore: '**/*.d.ts'};
glob("node_modules/ng2-bootstrap/**/*.ts", options, function (er, files) {
for(i in files){
removeFile(files[i]);
}
});
glob("node_modules/ng2-file-upload/**/*.ts", options, function (er, files) {
for(i in files){
removeFile(files[i]);
}
});
removeFile = function(file){
fs.remove(file, function (err) {
if (err) return console.error(err)
})
}
我在npm中将其作为postinstall
脚本运行:
"scripts": {
...
"postinstall": "typings install && node ./scripts/hack-remove-files.js",
}
下载软件包后,只需要完成一次。
另一种命令行方法是:
find node_modules/ng2-bootstrap -name '*.ts' | grep -v '\.d\.ts$' | xargs rm
我找到了原始问题:https://github.com/valor-software/ng2-bootstrap/issues/128