74 votes

webpack TS2304 Impossible de trouver le nom 'Carte', 'Ensemble', 'Promise'

J'ai le texte suivant 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-.+))/]
      }
    ]
  }
};

et la suite 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
}

Lorsque j'exécute tsc commande suivante, tout fonctionne très bien.

ng2-auto-complete (master)$ tsc --declaration
ng2-auto-complete (master)$ 

Lorsque j'exécute webpack de commande, il montre tapuscrit les erreurs de compilation.

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)$ 

Je ne sais pas ce que je suis absent pour webpack et tapuscrits de compilation.

node_modules a été exclu tsconfig.json

"exclure": [ "node_modules" ],

et les définitions de type, y-a node_modules

  "devDependencies": {
    "@types/core-js": "^0.9.32",
    "@types/node": "^6.0.31"

J'ai aussi essayé d'utiliser typings.json et typings répertoire sans succès.

{
  "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"
  }
}

Pour info, les versions

$ node --version
v5.7.1
$ npm --version
3.6.0
$ tsc --version
Version 2.0.0

Comment puis-je me débarrasser de TS2304 erreurs avec webpack commande?

129voto

allenhwkim Points 6012

J'ai ajouté que cela fonctionne en tsconfig.json, et il semble de travail sans aucune erreur.

  "compilerOptions": {
    "target": "es5",
    "lib": ["es5", "es6", "dom"],  <--- this
    ...
  }

Je ne suis pas sûr lib sont pour le Tapuscrit 2.0 fonction ou pas, mais découvert il y a plusieurs bibliothèques sont disponibles

À partir du tapuscrit config schéma (note de l'es2015.de la 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" ]
      }
    }

Cela résout les erreurs de compilation, mais je me demande encore pourquoi tsc commande fonctionne sans erreurs, mais webpack ne le sont pas. tsc recherches pour tous les types de bibliothèques sans l'aide d' lib par tsconfig.json?

50voto

Nitzan Tomer Points 11798

Map, Set et Promise sont ES6 fonctionnalités.
Dans votre tsconfig.json vous utilisez:

"target": "es5" 

ce qui provoque le compilateur le recours à la normale es5 lib.d.ts , qui ne dispose pas de la définition des types ci-dessus.

Vous souhaitez utiliser la lib.es6.d.ts:

"target": "es6" 

43voto

Legends Points 6728

Ne pas changer quoi que ce soit, mais d'ajouter:

 "lib": ["es6"] // means at least ES6

Ne pas changer de cible. La cible est utilisé pour indiquer à la Machine dans la version de ECMAScript pour compiler votre .ts fichiers. Bien sûr, vous pouvez le modifier, si le navigateur de votre demande va être en cours d'exécution, sera l'appui de cette version d'ECMAScript.

Par exemple, j'utilise "target": "es5" et "lib": ["es6"].


Une autre raison pourrait être:

Que votre .ts le fichier n'est pas en vertu de l' "rootDir": "./YourFolder",

14voto

user1618323 Points 232

Si vous vous demandez pourquoi aucune de ces corrections ne vous convient, si vous spécifiez le fichier à compiler sur la ligne de commande ou package.json, tsc ne lira PAS votre fichier tsconfig.json et n'aura donc aucun effet. Au lieu de cela, spécifiez les "fichiers" et "outDir" dans votre tsconfig.json et l’un des correctifs de "lib" fonctionnera probablement pour vous. Puis compiler avec seulement:

tsc --sourcemaps

10voto

phray2002 Points 126
 tsc index.ts --lib "es6"
 

Si l'ajout de lib ne fonctionne pas dans tsconfig.json, utilisez l'option de ligne de commande ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X