J'ai le webpack.config.js suivant
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 le tsconfig.json suivant
{
"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 je lance la commande tsc
comme suit, tout fonctionne correctement.
ng2-auto-complete (master)$ tsc --declaration
ng2-auto-complete (master)$
Lorsque je lance la commande webpack
, elle indique les erreurs de compilation TypeScript.
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)$
Je ne sais pas ce qui me manque pour la compilation webpack et TypeScript.
node_modules
a été exclu dans tsconfig.json
"exclude": ["node_modules"],
et les définitions de type sont là dans node_modules
"devDependencies": {
"@types/core-js": "^0.9.32",
"@types/node": "^6.0.31"
J'ai aussi essayé d'utiliser typings.json
et le répertoire typings 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"
}
}
FYI, versions
$ node --version
v5.7.1
$ npm --version
3.6.0
$ tsc --version
Version 2.0.0
Comment se débarrasser des erreurs TS2304 avec la commande webpack
?
J'ai ajouté ceci pour fonctionner dans tsconfig.json
, et cela semble fonctionner sans erreur.
"compilerOptions": {
"target": "es5",
"lib": ["es5", "es6", "dom"], <--- this
...
}
Je ne suis pas sûr que lib
soit pour la fonction TypeScript 2.0, mais j'ai découvert qu'il existe plusieurs bibliothèques disponibles.
A partir du schéma de configuration TypeScript (notez le 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" ]
}
}
Cela résout les erreurs de compilation, mais je me demande toujours pourquoi la commande tsc
fonctionne sans erreur, alors que webpack
ne le fait pas. tsc
recherche toutes les bibliothèques possibles sans utiliser lib
de tsconfig.json
?
Map
, Set
et Promise
sont des caractéristiques ES6
.
Dans votre tsconfig.json
vous utilisez:
"target": "es5"
Cela oblige le compilateur à utiliser le normal es5
lib.d.ts , auquel il manque les définitions des types ci-dessus.
Vous voulez utiliser le lib.es6.d.ts :
"target": "es6"
Ajoutez simplement:
"lib": ["es6"] // means at least ES6
Ne changez pas de cible. Target est utilisé pour indiquer à TypeScript dans quelle version d'ECMAScript compiler vos fichiers .ts
. Bien sûr, vous pouvez le changer si le navigateur dans lequel votre application sera exécutée supportera cette version d’ECMAScript.
Par exemple, j'utilise "target": "es5"
et "lib": ["es6"]
.
ne autre raison pourrait être:
Que votre fichier .ts
ne se trouve pas sous "rootDir": "./YourFolder",
Si vous vous demandez pourquoi aucune de ces corrections ne fonctionne pour vous, gardez à l'esprit - si vous spécifiez le fichier à compiler sur la ligne de commande ou package.json, tsc ne lira PAS votre fichier tsconfig.json et par conséquent n'a aucun effet. Spécifiez plutôt les "fichiers" et "outDir" dans votre fichier tsconfig.json et l’un des correctifs de "lib" fonctionnera probablement pour vous. Puis compiler avec seulement:
tsc --sourcemaps
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.
J'ai dû installer les typings core-js de npm pour résoudre le problème.
npm install @types/core-js
explication:
Le but des @types npm packages est d’obtenir les définitions de type avec npm. L'utilisation de ces définitions de type est une fonctionnalité TypeScript 2..
@types replace outils actuels tels que typings et tsd, même s'ils resteront pris en charge pendant un certain temps.
Étant donné que la réponse directement au PO a déjà été traitée, je me suis dit que j'ajouterais ce qui était réglé pour moi. Ma situation était légèrement différente en ce sens que je n'utilisais pas WebPack et que je rencontrais ces erreurs lorsque j'essayais d'utiliser tsc. La réponse que tout le monde donne (ajouter "es6" à lib) ne l’a pas résolue. Le problème pour moi était que j'avais la v9.11.1 du nœud installé sur ma machine, mais que j'avais utilisé npm pour récupérer "@ types/node", le dernier en date étant v10 +. Une fois que j'ai désinstallé ce type de nœud et installé un fichier de typage de nœud v9 spécifique, ce problème a été résolu.
https://stackoverflow.com/a/44800490/9690407
npm install typings -g typings install
est obsolète dans npm 5.6.0!
Utilisez plutôt la syntaxe npm install @types/core-js
.
Dans votre tsconfig.json, remplacez simplement "cible": "es5" par "cible": "es6"
Pour résoudre cette erreur, modifiez les propriétés suivantes dans le fichier tsconfig.json.
"lib": [
"es2018",
"dom",
"es5",
"es6"
],
"module": "es2015",
"target": "es6"
Après cela, exécutez la commande suivante dans le terminal.
npm install @types/es6-shim
ERREUR RÉSOLUE.
pour es6 utiliser cette
tsc filename.ts --lib es2015
Dans mon cas je devais courir:npm install typings -g typings install
Cela a résolu mon problème