I have the following 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-.+))/] } ] } }; and the following 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 } When I run tsc command as the following, it all works fine.
ng2-auto-complete (master)$ tsc --declaration ng2-auto-complete (master)$ When I run webpack command, it shows typescript compile errors.
ng2-auto-complete (master)$ webpack ts-loader: Using [email protected] 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)$ I don't know what I am missing for webpack and typescript compilation.
node_modules has been excluded in tsconfig.json
"exclude": [ "node_modules" ],
and type definitions are there in node_modules
"devDependencies": { "@types/core-js": "^0.9.32", "@types/node": "^6.0.31" I also tried to use typings.json and typings directory without success.
{ "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" } } FYI, versions
$ node --version v5.7.1 $ npm --version 3.6.0 $ tsc --version Version 2.0.0 How do I get rid of TS2304 errors with webpack command?
I added this to work in tsconfig.json, and it seems working without any error.
"compilerOptions": { "target": "es5", "lib": ["es5", "es6", "dom"], <--- this ... } I am not sure lib are for Typescript 2.0 function or not, but found out there are several libraries are available
From the typescript config schema (note the 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" ] } } This solves the compile errors, but I still wonder why tsc command works without any errors, but webpack does not. tsc searches for all possible libraries without using lib by tsconfig.json?
Map, Set and Promise are ES6 features.
In your tsconfig.json you are using:
"target": "es5" This causes the compiler to use the normal es5 lib.d.ts, which lacks the definitions for the above types.
You want to use the lib.es6.d.ts:
"target": "es6"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With