Javascript 如何在节点中设置支持ES6模块的网页包
我将Webpack用于捆绑客户端和服务器代码,因此我的Webpack.config.js如下所示:Javascript 如何在节点中设置支持ES6模块的网页包,javascript,node.js,webpack,ecmascript-6,babeljs,Javascript,Node.js,Webpack,Ecmascript 6,Babeljs,我将Webpack用于捆绑客户端和服务器代码,因此我的Webpack.config.js如下所示: module.exports = [ { /* client config */ }, { /* server config */ }, ]; 我想用Babel编写ES6模块和ES5的Transfile代码 对于客户端,这可以通过babel loader完成: 基于此,我为服务器编写了babel loader: { test: /\.js$/, exclude: /node_m
module.exports = [
{ /* client config */ },
{ /* server config */ },
];
我想用Babel编写ES6模块和ES5的Transfile代码
对于客户端,这可以通过babel loader完成:
基于此,我为服务器编写了babel loader:
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: [
'react',
[
'env',
{
targets: {
'node': 'current',
},
},
],
],
},
}
有些事情告诉我,巴贝尔装载机永远不会为这个目的工作
运行webpack后,捆绑包位于正确位置,但服务器入口点server.js传输不正确:
SyntaxError:意外的令牌导入
通常,当我们想要传输节点代码时,我们会使用babel cli包并在package.json中添加一个脚本:
和手动:
npm运行构建
我的问题是:如何在webpack.config.js中为节点设置ES6 transpiling和Babel
+奖金
webpack.config.js
通过指定
targets: {
'node': 'current',
}
您正在告诉babel将代码传输到用于传输代码的节点版本
您是否在生产环境中使用相同的节点版本
尝试指定数字节点版本,例如6.11.2,然后运行transpilation
您可以做的另一件事是告诉babel以ES6方式离开ES6模块,不要用commonjs方法替换它,这是默认设置:
targets: {
'node': ...,
},
modules: false
通过指定
targets: {
'node': 'current',
}
您正在告诉babel将代码传输到用于传输代码的节点版本
您是否在生产环境中使用相同的节点版本
尝试指定数字节点版本,例如6.11.2,然后运行transpilation
您可以做的另一件事是告诉babel以ES6方式离开ES6模块,不要用commonjs方法替换它,这是默认设置:
targets: {
'node': ...,
},
modules: false
这东西对我有用。试着检查一下
{
test: /\.(js|jsx)$/,
include: [].concat(
path.resolve('./app') //path to your application
),
use: ['babel-loader']
}
这东西对我有用。试着检查一下
{
test: /\.(js|jsx)$/,
include: [].concat(
path.resolve('./app') //path to your application
),
use: ['babel-loader']
}
您运行原始源代码是偶然的吗?不应该有任何导入语句,webpack不仅可以处理开箱即用的导入/导出,而且在您当前的Babel配置中,它们将在传递到webpack之前被传输,最好将导入内容留在webpack,而不是传输它们。@MichaelJungo抱歉,你说将导入保留到webpack而不是传输它们是什么意思?我注意到你使用的是webpack v1。我认为这不支持开箱即用的导入-也许问题就在这里。我找不到它的来源,但我想我今天读到了。我将尝试查找源代码,但您可以同时尝试碰撞webpack或包含某种加载程序。@package.json:webpack:^3.6.0@AlexandreThebaldi中的Morishiri我的意思是,您不应该让Babel Transportile ES模块根据需要导入/导出,因为webpack将处理它们,将它们保留为ES模块可以实现某些网页功能,例如。回到我的问题,您是运行原始源代码./server/server.js还是生成的包./build/server.js?您运行原始源代码是偶然的吗?不应该有任何导入语句,webpack不仅可以处理开箱即用的导入/导出,而且在您当前的Babel配置中,它们将在传递到webpack之前被传输,最好将导入内容留在webpack,而不是传输它们。@MichaelJungo抱歉,你说将导入保留到webpack而不是传输它们是什么意思?我注意到你使用的是webpack v1。我认为这不支持开箱即用的导入-也许问题就在这里。我找不到它的来源,但我想我今天读到了。我将尝试查找源代码,但您可以同时尝试碰撞webpack或包含某种加载程序。@package.json:webpack:^3.6.0@AlexandreThebaldi中的Morishiri我的意思是,您不应该让Babel Transportile ES模块根据需要导入/导出,因为webpack将处理它们,将它们保留为ES模块可以实现某些网页功能,例如。回到我的问题,您是运行原始源代码./server/server.js还是生成的包./build/server.js?是的,我想为不支持ES6模块的当前节点版本传输节点代码。通过设置modules:false选项,绑定的代码仍然和以前一样。导入令牌出现相同的语法错误。是否有可能在发生这种情况时准备最小的代码示例?您正在运行哪个节点版本?另一个想法出现了:您只传输js文件。您的react组件也是js吗?还是jsx?我的节点是最新的v8.6.0。关于React组件都是.js,当出现导入语法错误时,我甚至不包括它们。使用完整的webpack.config.js编辑问题。是的,我想为当前不支持ES6模块的节点版本传输节点代码。通过设置modules:false选项,绑定的代码仍然和以前一样。导入令牌出现相同的语法错误。是否有可能在发生这种情况时准备最小的代码示例?您正在运行哪个节点版本?另一个想法出现了:您只传输js文件。你的头发是白色的吗
那么js呢?还是jsx?我的节点是最新的v8.6.0。关于React组件都是.js,当出现导入语法错误时,我甚至不包含它们。使用完整的webpack.config.js编辑问题。完成了该操作并:SyntaxError:Unexpected token importHave your setup your.babelrc。它应该看起来像这样{预设:[[es2015,{comment:true,modules:false}],react,airbnb,survivejs看板]}这与jsx his询问节点有什么关系!完成后:SyntaxError:意外令牌导入已设置.babelrc。它应该看起来像这样{预设:[[es2015,{comment:true,modules:false}],react,airbnb,survivejs看板]}这与jsx his询问节点有什么关系!