Comment utiliser ES6 dans webpack.config? Comme ce repo https://github.com/kriasoft/react-starter-kit fait?
Par exemple:
en utilisant cette
import webpack from 'webpack';
au lieu de
var webpack = require('webpack');
C'est plutôt une curiosité qu'un besoin.
Essayez de nommer votre configuration sous le nom webpack.config.babel.js
. Vous devriez avoir babel-register inclus dans le projet. Exemple sur react-router-bootstrap .
Webpack s'appuie sur interpréter en interne pour que cela fonctionne.
Au lieu de ce que @bebraw suggère, vous pouvez créer un script d’automatisation JavaScript avec la syntaxe ES6 +:
// tools/bundle.js
import webpack from 'webpack';
import webpackConfig from './webpack.config.js'; // <-- Contains ES6+
const bundler = webpack(webpackConfig);
bundler.run(...);
Et l'exécute avec babel:
$ babel-node tools/bundle
P.S : L'appel de webpack via une API JavaScript peut être une meilleure approche (que de l'appeler via une ligne de commande) lorsque vous devez implémenter des étapes de construction plus complexes. Par exemple. Une fois le paquet côté serveur prêt, démarrez le serveur d'applications Node.js et, immédiatement après le démarrage du serveur Node.js, lancez le serveur de développement BrowserSync.
package.json/scripts
, tools/bundle.js
, tools/webpack.config.js
)run.js
, webpack.config.js
, node run
)Une autre approche consiste à avoir un script npm comme celui-ci: "webpack": "babel-node ./node_modules/webpack/bin/webpack"
et à l'exécuter comme suit: npm run webpack
.
J'ai eu un problème à faire fonctionner la solution de @ Juho avec Webpack 2. Les documents de migration Webpack vous proposent de désactiver l'analyse du module babel:
Il est important de noter que vous voudrez dire à Babel de ne pas analyser ces symboles de module afin que Webpack puisse les utiliser. Vous pouvez le faire en définissant ce qui suit dans vos options .babelrc ou babel-loader.
.babelrc:
{
"presets": [
["es2015", { "modules": false }]
]
}
Malheureusement, cela entre en conflit avec la fonctionnalité de registre automatique babel. Enlever
{ "modules": false }
de la config de babel a de nouveau fonctionné. Cependant, cela résulterait en une rupture d'arborescence, donc une solution complète impliquerait écrasant les préréglages dans les options du chargeur :
module: {
rules: [
{
test: /\.js$/,
include: path.resolve('src'),
loader: 'babel-loader',
options: {
babelrc: false,
presets: [['env', {modules: false}]]
}
}
]
}
Edit , 13 novembre 2017; extrait de configuration Webpack mis à jour vers Webpack 3 (grâce à @ x-yuri). Vieux, extrait de Webpack 2:
{
test: /\.js$/,
exclude: ['node_modules'],
loader: 'babel',
query: {
babelrc: false,
presets: [
['es2015', { modules: false }],
],
},
},
C’est très facile, mais cela n’a pas été évident pour moi, donc si quelqu'un est confus comme moi:
Ajoutez simplement .babel
à la partie de votre nom de fichier située avant l'extension (en supposant que vous avez babel-register
installé en tant que dépendance).
Exemple:
mv webpack.config.js webpack.config.babel.js
C'est ce qui a fonctionné pour moi avec webpack 4.
Dans package.json
:
"scripts": {
"dev": "cross-env APP_ENV=dev webpack-serve --require @babel/register"
},
"devDependencies": {
"@babel/core": "^7.0.0-rc.1",
"@babel/register": "^7.0.0-rc.1",
"@babel/preset-env": "^7.0.0-rc.1",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2"
},
"babel": {
"presets": [
["@babel/preset-env", {
"targets": {
"node": "current"
}
}]
],
"plugins": [
"transform-es2015-modules-commonjs"
]
}
Vous pouvez clairement voir comment chaque dépendance est utilisée, donc pas de surprises.
Remarque J'utilise webpack-serve
-- require , mais si vous souhaitez utiliser la commande webpack
, remplacez-la par webpack --config-register
. Dans les deux cas, @babel/register
est nécessaire pour que cela fonctionne.
Et c'est tout!
yarn dev
Et vous pouvez utiliser es6
dans la configuration!
Pour webpack-dev-server
, utilisez l'option --config-register
qui est identique à la commande webpack
.
PAS besoin de renommer le fichier de configuration en webpack.config.babel.js
(comme suggéré par la réponse acceptée). webpack.config.js
fonctionnera parfaitement.
Une autre méthode consiste à utiliser l'argument require pour le noeud:
node -r babel-register ./node_modules/webpack/bin/webpack
Présentée de cette façon dans electron-react-boilerplate , regardez les scripts build-main
et build-renderer
.
Configuration pour Babel 7 & Webpack 4
package.json
...
"scripts": {
"start": "webpack-dev-server --env.dev",
"build": "webpack --env.prod",
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/plugin-proposal-class-properties": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"@babel/register": "^7.0.0",
"babel-loader": "^8.0.0",
...
"webpack": "^4.17.2",
"webpack-cli": "^3.1.0",
"webpack-config-utils": "^2.3.1",
"webpack-dev-server": "^3.1.8"
. babelrc
{
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
webpack.config.babel.js
import webpack from 'webpack';
import { resolve } from 'path';
import { getIfUtils, removeEmpty } from 'webpack-config-utils';
export default env => {
const { ifProd, ifNotProd } = getIfUtils(env);
return {
mode: ifProd('production', 'development'),
devtool: ifNotProd('cheap-module-source-map'),
output: {
path: resolve(__dirname, ifProd('prod', 'dev')),
filename: 'bundle.js'
},
Renommez webpack.config.js
en webpack.config.babel.js
.
Puis dans .babelrc: {"presets": ["es2015"]}
Cependant, si vous voulez utiliser une configuration de babel différente pour babel-cli, votre .babelrc pourrait ressembler à ceci:
{
"env": {
"babel-cli": {
"presets": [["es2015", {"modules": false}]]
},
"production": {
"presets": ["es2015"]
},
"development": {
"presets": ["es2015"]
}
}
}
Et dans package.json:
{
"scripts": {
"babel": "BABEL_ENV='babel-cli' babel src -d dist/babel --source-maps",
"build-dev": "NODE_ENV='development' webpack -d --progress --profile --colors",
...
},
...
}
C'est idiot, mais le {"modules": false}
va rompre le webpack si vous n'utilisez pas d'environnements différents.
Pour plus d'informations sur .babelrc, consultez le documentation officielle .
Ma meilleure approche avec le script npm est
node -r babel-register ./node_modules/webpack/bin/webpack
et configurez le reste des scripts selon vos besoins pour Babel
Après des tonnes de documents ...
Il suffit d'installer le préréglage es2015 (pas env !!!) et de l'ajouter à
.babelrc:
{
"presets": [
["es2015", { "modules": false }]
]
}
Renommez votre webpack.config.js
en webpack.config.babel.js
Vous n'avez pas assez de représentants pour commenter, mais je voulais ajouter à tous les utilisateurs de TypeScript une solution similaire à @Sandrik ci-dessus
J'utilise deux scripts pointant vers des configurations Webpack (fichiers JS) contenant la syntaxe ES6.
"start-dev": "./node_modules/.bin/ts-node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config ./webpack/webpack.config.dev.js"
et
"build": "./node_modules/.bin/ts-node ./node_modules/webpack/bin/webpack.js --config webpack/webpack.config.js"
Pour TypeScript : directement depuis https://webpack.js.org/configuration/configuration-languages/
npm install --save-dev TypeScript ts-node @types/node @types/webpack
# and, if using webpack-dev-server
npm install --save-dev @types/webpack-dev-server
puis continuez pour écrire votre, par exemple: webpack.config.ts
import path from 'path';
import webpack from 'webpack';
const config: webpack.Configuration = {
mode: 'production',
entry: './foo.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'foo.bundle.js'
}
};
export default config;
Vérifiez le lien pour plus de détails où vous pouvez utiliser un plugin pour avoir un fichier tsconfig séparé juste pour la config webpack si vous ne ciblez pas commonjs (ce qui est un req pour que cela fonctionne car il repose sur ts-node).
Pour configurer un fichier de configuration WebPack en vue d'utiliser ES2015, Babel a besoin:
Installez les dépendances dev:
npm i -D webpack \
webpack-cli \
webpack-dev-server \
@babel/core \
@babel/register \
@babel/preset-env
npm i -D html-webpack-plugin
Créez un fichier .babelrc
:
{
"presets": ["@babel/preset-env"]
}
Créez votre configuration webpack, webpack.config.babel.js
:
import { resolve as _resolve } from 'path';
import HtmlWebpackPlugin from 'html-webpack-plugin';
const config = {
mode: 'development',
devServer: {
contentBase: './dist'
},
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'src/index.html'
})
],
resolve: {
modules: [_resolve(__dirname, './src'), 'node_modules']
}
};
export default config;
Créez vos scripts dans package.json
:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"start": "webpack-dev-server --open"
},
Exécutez npm run build
et npm start
.
La configuration webpack est basée sur un exemple de projet avec la structure de répertoires suivante:
├── README.md
├── package-lock.json
├── package.json
├── src
│ ├── Greeter.js
│ ├── index.html
│ └── index.js
└── webpack.config.babel.js
Exemple de projet: Langage de configuration Webpack utilisant Babel