Javascript 如何在节点中设置支持ES6模块的网页包

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

我将Webpack用于捆绑客户端和服务器代码,因此我的Webpack.config.js如下所示:

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询问节点有什么关系!