node.js - 如何强制Babel进行转型?

标签 node.js babeljs

我有以下文件:

./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 moduleses2015-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/

相关文章:

node.js - 使用 GeoFire 按半径查询位置

node.js - NodeJS : Unable to convert stream/buffer to base64 string

node.js - 如何将ES2017转换为ES5

node.js - 如何将服务器端渲染中的数据从 Node 传递到reactjs组件

vue.js - 动态导入导致错误 : Support for the experimental syntax 'dynamicImport' isn't currently enabled

gruntjs - 如何设置grunt-babel来转换整个目录

javascript - 为什么以及何时使用 Promise.resolve?

node.js - Express 未知错误处理程序正在记录自定义错误

node.js - MongoDB 减慢插入包含嵌套数组的数据的速度

javascript - Babel 注册教程不起作用