使用 browserify + babelify + tsify 缺少 TypeScript 类型
Missing TypeScript typings with browserify + babelify + tsify
我正在尝试逐步将一个 Angular JavaScript (ES5) 项目迁移到 TypeScript 2.0,我必须承认我很吃力。
所以首先我将 index.js 更改为 index.ts 并使用 recommended method of installing typings (npm install --save @types/node
) 而不是旧的 typings.json 方式。
构建设置使用 gulp
和 browserify
,现在按照 here 的建议引入 tsify
和 babelify
。
浏览器化
//...
.plugin(tsify)
.transform(babelify, {
presets: ['es2015'],
extensions: ['.ts', '.js']
})
//...
tsconfig.json
{
"files": [
"assets/app/index.ts"
],
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
}
}
然而构建失败:
TypeScript error: .tmp/public/app/index.ts(4,15): Error TS2304: Cannot find name 'require'.
tsify
似乎没有将安装的类型复制到输出目录,这导致了上述错误。
关于如何解决问题的任何建议?
编辑
将 node_modules/@types 文件夹复制到我的 C: 驱动器的根目录可以消除错误,但我不知道为什么...
如果有人遇到同样的问题:
在 tsconfig.json 中明确添加 typesRoot
选项修复了它。
"typeRoots" : ["./node_modules/@types"]
此 "should" 是默认设置,但出于某种原因,它会搜索 C: 驱动器根目录下的 @types 文件夹。
来自 TypeScript 文档:
If typesRoots is specified, only packages under typeRoots will be included.
我正在尝试逐步将一个 Angular JavaScript (ES5) 项目迁移到 TypeScript 2.0,我必须承认我很吃力。
所以首先我将 index.js 更改为 index.ts 并使用 recommended method of installing typings (npm install --save @types/node
) 而不是旧的 typings.json 方式。
构建设置使用 gulp
和 browserify
,现在按照 here 的建议引入 tsify
和 babelify
。
浏览器化
//...
.plugin(tsify)
.transform(babelify, {
presets: ['es2015'],
extensions: ['.ts', '.js']
})
//...
tsconfig.json
{
"files": [
"assets/app/index.ts"
],
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
}
}
然而构建失败:
TypeScript error: .tmp/public/app/index.ts(4,15): Error TS2304: Cannot find name 'require'.
tsify
似乎没有将安装的类型复制到输出目录,这导致了上述错误。
关于如何解决问题的任何建议?
编辑
将 node_modules/@types 文件夹复制到我的 C: 驱动器的根目录可以消除错误,但我不知道为什么...
如果有人遇到同样的问题:
在 tsconfig.json 中明确添加 typesRoot
选项修复了它。
"typeRoots" : ["./node_modules/@types"]
此 "should" 是默认设置,但出于某种原因,它会搜索 C: 驱动器根目录下的 @types 文件夹。
来自 TypeScript 文档:
If typesRoots is specified, only packages under typeRoots will be included.