我有以下文件:
./client/.babelrc
./client/index.js
./server/.babelrc
./server/index.js
客户端
./client/index.js
代码是:
import 'test';
./client/.babelrc
是:
{
"presets": [
"es2015-webpack",
"stage-0",
"react"
]
}
客户端代码由 webpack 2 使用。 webpack 2 supports ES6 modules 。 es2015-webpack
是一个 babel 预设,可将代码转换为 ES5,但不会将 ES6 模块转换为 CommonJS。因此,转译后的代码保持不变。
服务器
./server/index.js
代码是:
import './../client';
./server/.babelrc
是:
{
"presets": [
"es2015",
"stage-0"
]
}
node.js v5.5.0 不支持 ES6 模块。因此,整个代码需要转译为 ES5。但是, Node 脚本需要包含部分客户端代码(例如配置、初始状态)。
我尝试使用 babel-node
运行服务器代码,例如
cd ./server
babel-node ./index.js
这会产生一个错误:
./client/index.js:1
import 'test';
^^^^^^
SyntaxError: Unexpected token
这样做的原因是因为 babel-node
(和 babel
)尊重 ./client/.babelrc
。
在编译服务器代码时,如何强制 Babel 对整个代码库使用 babel-plugin-transform-es2015-modules-commonjs
插件(或 es2015
预设)?
我尝试使用 --no-babelrc
选项。但它只忽略当前工作目录中的 .babelrc
。
最佳答案
刚刚在解决类似的问题
我最终删除了 [ .babelrc 中的所有预设]
通过 webpack 添加客户端预设 [ webpack.config.js ]
module: {
loaders: [
{ test: /\.js$/, exclude: /node_modules/,
loader: 'babel-loader',
query: { presets: ["react", "es2015-webpack"] } }
]
},
并通过[ babel-node 运行服务器预设]
"scripts": {
"start": "set NODE_ENV=development; webpack --progress && babel-node --presets es2015,react modules/server.js"
},
关于node.js - 如何强制Babel进行转型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35228923/