node.js - 在生产入口文件中使用 babel-polyfill

标签 node.js ecmascript-2017 babel-polyfill babel-cli babel-core

我正在使用 babel 来转换 ES7 js 代码,并且在开发/暂存中一切都很好用。在应用程序内部,我严重依赖 ES7 的async/await 特性。我的条目文件如下所示:

'use strict';
require("babel-polyfill");
require("babel-core/register");
module.exports = require('./app/server').default();

我不确定是否有必要为生产环境保留 babel-polyfillbabel-core/register 模块,因为我使用 babel-cli 转译所有内容部署前。我假设它必须正常工作,即使我删除了它们并使条目文件看起来像这样:

import server from './app/server';
server();

但是,如果这样做,我会在启动应用程序时遇到下一个异常:

ReferenceError: regeneratorRuntime is not defined
    at C:\Users\Username\Documents\some-service\lib\app\repositories\someRepository.js:18:32
    at Object.<anonymous> (C:\Users\Username\Documents\some-service\lib\app\repositories\someRepository.js:40:2)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (C:\Users\Username\Documents\some-service\lib\app\controllers\someController.js:15:27)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (C:\Users\Username\Documents\some-service\lib\app\server.js:15:26)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)

在生产环境中引用babel-polyfillbabel-core/register包是否正常?

最佳答案

如果您在开发过程中依赖这些模块(babel-polyfill 和 babel-core/register),您也需要在生产文件中使用它们。转译过程不会添加诸如 Object.assignPromise 之类的 polyfill。

docs page for the babel polyfills没有明确说明您应该为开发和生产包含不同的库。但它确实说您需要包含它或特定的 polyfill 来实现您想要的功能,这似乎是说您在任何环境中都需要它们。

简短的回答:在每个环境中包含 polyfills 是标准的,因为 babel 的转译本身不会添加 polyfills。

关于node.js - 在生产入口文件中使用 babel-polyfill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42682368/

相关文章:

node.js - 创建后 Postgresql 数据库在 travis ci 中不存在

javascript - 循环中的 NodeJS MySQL 查询在预期之前返回

javascript - promise 异步/等待

javascript - 为什么 ESLint 在将异步函数定义为现有对象的方法时会抛出解析错误以及如何防止它?

javascript - core-js/babel-polyfill polyfill 函数显示为 [native code]

javascript - 按条件每次处理n个对象

node.js - 检查nodejs中的另一个函数中是否存在一个函数

javascript - 类型 'entries' 上不存在属性 'ObjectConstructor'

javascript - 使用 webpack 时自定义处理程序不起作用

polyfills - core-js 是否会进行polyfill,或者它是否总是替换该函数?