如何在webpack.config中使用ES6? 像这个回购 https://github.com/kriasoft/react-starter-kit 呢?
例如:
使用此
import webpack from 'webpack';
而不是
var webpack = require('webpack');
这是一种好奇而非需要。
答案 0 :(得分:210)
尝试将您的配置命名为webpack.config.babel.js
。您应该在项目中包含babel-register。 react-router-bootstrap上的示例。
Webpack在内部依赖interpret来完成这项工作。
答案 1 :(得分:36)
作为@bebraw建议的替代方法,您可以使用ES6 +语法创建JavaScript自动化脚本:
=TODAY()
用babel执行它:
// tools/bundle.js
import webpack from 'webpack';
import webpackConfig from './webpack.config.js'; // <-- Contains ES6+
const bundler = webpack(webpackConfig);
bundler.run(...);
P.S。:当您需要实施更复杂的构建步骤时,通过JavaScript API调用webpack可能是一种更好的方法(而不是通过命令行调用它)。例如。服务器端捆绑包准备好后,启动Node.js应用服务器,并在Node.js服务器启动后立即启动BrowserSync开发服务器。
$ babel-node tools/bundle
,package.json/scripts
,tools/bundle.js
)tools/webpack.config.js
,run.js
,webpack.config.js
)答案 2 :(得分:18)
另一种方法是使用这样的npm脚本:"webpack": "babel-node ./node_modules/webpack/bin/webpack"
,然后运行它:npm run webpack
。
答案 3 :(得分:15)
我在使用Webpack 2运行@Juho的解决方案时遇到了问题。Webpack migration docs建议你转向babel模块解析:
请注意,您需要告诉Babel不要解析 这些模块符号因此webpack可以使用它们。你可以这样做 在.babelrc或babel-loader选项中设置以下内容。
.babelrc:
{
"presets": [
["es2015", { "modules": false }]
]
}
可悲的是,这与自动babel注册功能相冲突。删除
{ "modules": false }
来自babel配置的让事情再次运行。但是,这会导致破坏树木,因此完整的解决方案将涉及overwriting the presets in the loader options:
module: {
rules: [
{
test: /\.js$/,
include: path.resolve('src'),
loader: 'babel-loader',
options: {
babelrc: false,
presets: [['env', {modules: false}]]
}
}
]
}
编辑,2017年11月13日;将webpack配置代码段更新为Webpack 3(感谢@ x-yuri)。旧的,Webpack 2片段:
{
test: /\.js$/,
exclude: ['node_modules'],
loader: 'babel',
query: {
babelrc: false,
presets: [
['es2015', { modules: false }],
],
},
},
答案 4 :(得分:11)
这很简单,但对于我来说,任何答案都不是很明显,所以如果有其他人像我一样感到困惑:
只需在扩展名之前将.babel
附加到文件名部分(假设您已将babel-register
作为依赖项安装)。
示例:
mv webpack.config.js webpack.config.babel.js
答案 5 :(得分:6)
这是使用webpack 4对我有用的。
在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"
]
}
您可以清楚地看到每个依赖项的使用方式,因此在此不会感到惊讶。
注意我正在使用webpack-serve
--require,但是如果您想使用webpack
命令,请用webpack --config-register
替换它。无论哪种情况,都需要@babel/register
才能完成。
就是这样!
yarn dev
您就可以在配置中使用es6
!
对于webpack-dev-server
,请使用--config-register
选项,该选项与webpack
命令相同
无需将配置文件重命名为webpack.config.babel.js
(如已接受的答案所建议)。 webpack.config.js
可以正常工作。
答案 6 :(得分:5)
另一种方法是对节点使用require参数:
node -r babel-register ./node_modules/webpack/bin/webpack
在electron-react-boilerplate中找到这种方式,查看build-main
和build-renderer
脚本。
答案 7 :(得分:4)
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'
},
答案 8 :(得分:3)
将webpack.config.js
重命名为webpack.config.babel.js
。
然后在.babelrc:{"presets": ["es2015"]}
但是,如果你想为babel-cli使用不同的babel配置,你的.babelrc可能看起来像这样:
{
"env": {
"babel-cli": {
"presets": [["es2015", {"modules": false}]]
},
"production": {
"presets": ["es2015"]
},
"development": {
"presets": ["es2015"]
}
}
}
在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",
...
},
...
}
这是愚蠢的,但如果你不使用不同的环境,{"modules": false}
会打破网络包。
有关.babelrc的更多信息,请查看official docs。
答案 9 :(得分:1)
答案 10 :(得分:1)
没有足够的代表评论,但我想为任何TypeScript用户添加类似的解决方案@Sandrik
我有两个脚本,我使用指向包含ES6语法的webpack配置(JS文件)。
"start-dev": "./node_modules/.bin/ts-node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config ./webpack/webpack.config.dev.js"
和
"build": "./node_modules/.bin/ts-node ./node_modules/webpack/bin/webpack.js --config webpack/webpack.config.js"
答案 11 :(得分:1)
大量文件之后...
只需安装es2015预设(不是env !!!)并将其添加到
.babelrc:
{
"presets": [
["es2015", { "modules": false }]
]
}
将您的webpack.config.js
重命名为webpack.config.babel.js
答案 12 :(得分:1)
将es6添加到webpack中需要3个步骤
在 webpack.config.js 中添加
module:{
rules:[
{
test: /\.js$/,
loader: 'babel-loader'
}
]
}
{ "presets": ["@babel/env", "@babel/react"], "plugins": [ [ "@babel/plugin-proposal-class-properties", ] ] }
npm install @babel/core --save-dev npm install @babel/preset-env --save-dev npm install @babel/preset-react --save-dev npm install @babel/plugin-proposal-class-properties --save-dev npm install babel-loader --save-dev
答案 13 :(得分:0)
对于 TypeScript :直接从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
然后继续写您的信息,例如: 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;
检查链接以获取更多详细信息,如果您不针对commonjs,则可以在其中使用插件为Webpack配置使用单独的tsconfig文件(由于它依赖于ts-node,因此这是一项工作要求)
答案 14 :(得分:0)
要设置Webpack配置文件以使用ES2015,需要Babel:
安装开发人员依赖项:
npm i -D webpack \
webpack-cli \
webpack-dev-server \
@babel/core \
@babel/register \
@babel/preset-env
npm i -D html-webpack-plugin
创建一个.babelrc
文件:
{
"presets": ["@babel/preset-env"]
}
创建您的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;
在package.json
中创建脚本:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"start": "webpack-dev-server --open"
},
运行npm run build
和npm start
。
webpack配置基于具有以下目录结构的示例项目:
├── README.md
├── package-lock.json
├── package.json
├── src
│ ├── Greeter.js
│ ├── index.html
│ └── index.js
└── webpack.config.babel.js
答案 15 :(得分:0)
不能。您必须使用babel
或esm
将其转换为CommonJS。
https://github.com/webpack/webpack-cli/issues/282
但是您可以运行webpack -r esm @babel/register