我有以下webpack.config.js
var path = require("path");
var webpack = require('webpack');
module.exports = {
entry: {
'ng2-auto-complete': path.join(__dirname, 'src', 'index.ts')
},
resolve: {
extensions: ['', '.ts', '.js', '.json', '.css', '.html']
},
output: {
path: path.join(__dirname, 'dist'),
filename: "[name].umd.js",
library: ["[name]"],
libraryTarget: "umd"
},
externals: [
/^rxjs\//, //.... any other way? rx.umd.min.js does work?
/^@angular\//
],
devtool: 'source-map',
module: {
loaders: [
{ // Support for .ts files.
test: /\.ts$/,
loaders: ['ts', 'angular2-template-loader'],
exclude: [/test/, /node_modules\/(?!(ng2-.+))/]
}
]
}
};
和以下tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"noEmitHelpers": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"pretty": true,
"allowUnreachableCode": true,
"allowUnusedLabels": true,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitUseStrict": false,
"noFallthroughCasesInSwitch": false,
"allowSyntheticDefaultImports": true,
"suppressExcessPropertyErrors": true,
"suppressImplicitAnyIndexErrors": true,
"outDir": "dist",
"baseUrl": "src"
},
"files": [
"src/index.ts"
],
"exclude": [
"node_modules"
],
"compileOnSave": false,
"buildOnSave": false
}
当我按以下方式运行tsc
命令时,一切正常。
ng2-auto-complete (master)$ tsc --declaration
ng2-auto-complete (master)$
当我运行webpack
命令时,它会显示typescript编译错误。
ng2-auto-complete (master)$ webpack
ts-loader: Using typescript@2.0.0 and /Users/allen/github/ng2-auto-complete/tsconfig.json
Hash: bd6c50e4b9732c3ffa9d
Version: webpack 1.13.2
Time: 5041ms
Asset Size Chunks Chunk Names
ng2-auto-complete.umd.js 24.4 kB 0 [emitted] ng2-auto-complete
ng2-auto-complete.umd.js.map 28.4 kB 0 [emitted] ng2-auto-complete
+ 11 hidden modules
ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/dom/dom_renderer.d.ts
(18,37): error TS2304: Cannot find name 'Map'.
ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/dom/dom_adapter.d.ts
(96,42): error TS2304: Cannot find name 'Map'.
ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/web_workers/worker/location_providers.d.ts
(21,86): error TS2304: Cannot find name 'Promise'.
...
ng2-auto-complete (master)$
我不知道webpack和打字稿编译中缺少什么。
node_modules
已被tsconfig.json
"排除":[ " node_modules" ],
和node_modules
"devDependencies": {
"@types/core-js": "^0.9.32",
"@types/node": "^6.0.31"
我还尝试使用typings.json
和typings目录但没有成功。
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160725163759",
"jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
"node": "registry:dt/node#6.0.0+20160815222444"
}
}
仅供参考,版本
$ node --version
v5.7.1
$ npm --version
3.6.0
$ tsc --version
Version 2.0.0
如何使用webpack
命令摆脱TS2304错误?
答案 0 :(得分:106)
我将此添加到tsconfig.json
中工作,似乎没有任何错误。
"compilerOptions": {
"target": "es5",
"lib": ["es5", "es6", "dom"], <--- this
...
}
我不确定lib
是否适用于Typescript 2.0功能,但发现有几个库可用
从typescript配置架构(注意es2015.collection)
"lib": {
"description": "Specify library file to be included in the compilation. Requires TypeScript version 2.0 or later.",
"type": "array",
"items": {
"type": "string",
"enum": [ "es5", "es6", "es2015", "es7", "es2016", "es2017", "dom", "webworker", "scripthost", "es2015.core", "es2015.collection", "es2015.generator", "es2015.iterable",
"es2015.promise", "es2015.proxy", "es2015.reflect", "es2015.symbol", "es2015.symbol.wellknown", "es2016.array.include", "es2017.object", "es2017.sharedmemory" ]
}
}
这解决了编译错误,但我仍然想知道为什么tsc
命令没有任何错误,但webpack
没有。 tsc
lib
搜索所有可能的库而不使用tsconfig.json
?
答案 1 :(得分:40)
Map
,Set
和Promise
是ES6
个功能
在您正在使用的tsconfig.json
中:
"target": "es5"
这会导致编译器使用普通es5
lib.d.ts,它缺少上述类型的定义。
您想使用lib.es6.d.ts:
"target": "es6"
答案 2 :(得分:32)
不要改变任何东西,只需添加:
myCanvases
不要改变目标。
Target用于告诉Typescript要编译 "lib": ["es6"] // means at least ES6
文件的ECMAScript版本。当然,您可以更改它,如果您的应用程序将运行的浏览器,将支持该版本的ECMAScript。
例如,我使用.ts
和"target": "es5"
。
另一个原因可能是:
您的"lib": ["es6"]
文件不在.ts
答案 3 :(得分:10)
tsc index.ts --lib "es6"
如果使用上面的命令行选项
添加lib在tsconfig.json中不起作用答案 4 :(得分:10)
如果您想知道为什么没有这些修复工作,请记住 - 如果您指定要在命令行或package.json上编译的文件,tsc将不会读取您的tsconfig.json文件因此无效。而是在tsconfig.json中指定“files”和“outDir”,其中一个“lib”修复程序可能适合您。然后只编译:
tsc --sourcemaps
答案 5 :(得分:5)
我必须从npm安装core-js打字来解决问题
npm install @types/core-js
<强>解释强>:
@types npm包的目标是使用npm获取类型定义。使用这些类型定义是 TypeScript 2.0 功能。
@types 替换当前工具,例如 typings 和 tsd ,但这些工具将会继续得到支持一段时间。
答案 6 :(得分:3)
https://stackoverflow.com/a/44800490/9690407
npm install typings -g
typings install
在npm 5.6.0中弃用!
而是使用npm install @types/core-js
语法。
答案 7 :(得分:3)
由于已经回答了直接回答OP的问题,我想我会添加为我修复它的内容。我的情况略有不同,因为我没有使用WebPack,并且在尝试使用tsc时遇到了这些错误。其他人给出的答案(添加&#34; es6&#34;到lib)并没有为我解决。对我来说问题是我的机器上安装了v9.11.1节点,但我使用了npm来获取#34; @ types / node&#34;,它获得了最新的v10 +。一旦我卸载该节点并键入并安装了特定的v9节点类型文件,此问题就解决了。
答案 8 :(得分:1)
在你的tsconfig.json中只需将“target”:“es5”更改为“target”:“es6”
答案 9 :(得分:1)
我正在使用node.js v10.16.3.
,对我来说,问题是打字稿编译器忽略了我的tsconfig.json
文件。
三种解决方案对我有用:
tsc filename.ts --lib "es6", "dom"
@types/node
,这将允许您运行tsc filename.ts
而不会出现错误。答案 10 :(得分:0)
在我的情况下,我必须跑:
npm install typings -g
typings install
这解决了我的问题
答案 11 :(得分:0)
要解决此错误,请更改tsconfig.json文件中的以下属性。
library(stringr)
df1 %>%
group_by(grp = cumsum(str_detect(Time, "^[0-9]")) %>%
mutate(Count = n())
之后,在终端中运行以下命令。
"lib": [
"es2018",
"dom",
"es5",
"es6"
],
"module": "es2015",
"target": "es6"
错误已解决。
答案 12 :(得分:0)
对于es6,请使用此
tsc filename.ts --lib es2015
答案 13 :(得分:0)
要解决此问题,您只需要像这样在ts文件中导入map方法:
import { map } from 'rxjs/operators';
答案 14 :(得分:0)
对我来说,解决方案是安装@types/node
:
yarn add @types/node --dev
或者,如果您更喜欢npm:
npm install @types/node --dev
但是,我想,如果您打算继续使用“地图”,“设置”或“承诺”,则无论如何,最好将{es1”包含在tsconfig.json
中的“ lib”数组中。