我怎样才能在webpack.config.js中使用ES6?
如何在webpack.config中使用ES6? 像这个回购https://github.com/kriasoft/react-starter-kit呢?
例如:
使用这个
import webpack from 'webpack';
代替
var webpack = require('webpack');
这是一个好奇心,而不是一个需要。
尝试将您的configuration命名为webpack.config.babel.js
。 你应该有包含在项目中的babel-register 。 示例在react-router-bootstrap 。
Webpack依靠内部解释来完成这项工作。
作为@bebrawbuild议的替代scheme,您可以使用ES6 +语法创buildJavaScript自动化脚本:
// tools/bundle.js import webpack from 'webpack'; import webpackConfig from './webpack.config.js'; // <-- Contains ES6+ const bundler = webpack(webpackConfig); bundler.run(...);
并用babel执行它:
$ babel-node tools/bundle
PS :当你需要实现更复杂的构build步骤时,通过JavaScript API调用webpack可能是一个比通过命令行调用更好的方法。 例如,在服务器端软件包准备就绪后,启动Node.js应用程序服务器,在Node.js服务器启动之后,启动BrowserSync dev服务器。
也可以看看:
- React入门套件 (
package.json/scripts
,tools/bundle.js
,tools/webpack.config.js
) - React静态Boilerplate (
run.js
,webpack.config.js
,node run
) - 你可能不需要Gulp.js
另一种方法是使用如下的npm脚本: "webpack": "babel-node ./node_modules/webpack/bin/webpack"
,然后像这样npm run webpack
: npm run webpack
。
这真的很容易,但是从任何答案来看我都不是很明显,所以如果有人像我一样困惑:
只要在扩展名之前添加.babel
到文件名的部分 (假设你已经将babel-register
安装为依赖项)。
例:
mv webpack.config.js webpack.config.babel.js
我有一个问题得到@ Juho的解决scheme与Webpack 2运行。Webpack迁移文档build议您转向babel模块parsing:
需要注意的是,你要告诉Babel不要分析这些模块符号,以便webpack可以使用它们。 您可以通过在.babelrc或者babel-loader选项中设置以下内容来完成此操作。
.babelrc:
{ "presets": [ ["es2015", { "modules": false }] ] }
不幸的是,这与自动babel寄存器function冲突。 删除
{ "modules": false }
从巴贝尔configuration得到的东西再次运行。 但是,这会导致破坏树状结构,因此完整的解决scheme将涉及覆盖加载器选项中的预设 :
module: { rules: [ { test: /\.js$/, include: path.resolve('src'), loader: 'babel-loader', options: { babelrc: false, presets: [['env', {modules: false}]] } } ] }
编辑 ,2017年11月13日; 更新的webpackconfiguration片段到Webpack 3(感谢@ x-yuri)。 旧的,Webpack 2片段:
{ test: /\.js$/, exclude: ['node_modules'], loader: 'babel', query: { babelrc: false, presets: [ ['es2015', { modules: false }], ], }, },
还有一种方法是对节点使用require参数:
node -r babel-register ./node_modules/webpack/bin/webpack
在电子反应模式中find了这种方式,查看build-main
和build-renderer
脚本。
将webpack.config.js
重命名为webpack.config.babel.js
。
然后在.babelrc中: {"presets": ["es2015"]}
presets {"presets": ["es2015"]}
但是,如果你想为babel-cli使用不同的babelconfiguration,你的.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}
将打破webpack,如果你不使用不同的envs。
有关.babelrc的更多信息,请查看官方文档 。
我最好的方法与npm脚本一起
node -r babel-register ./node_modules/webpack/bin/webpack
并按照您对Babel的要求configuration其余的脚本
没有足够的代表评论,但我想添加任何TypeScript用户有一个类似的解决scheme,以上@Sandrik
我有两个指向包含ES6语法的webpackconfiguration(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"