rollupjs - 没有创建babelHelpers对象

时间:2016-12-05 20:26:36

标签: javascript ecmascript-6 babel rollupjs

我使用汇总和babel来转换一些ES6代码并将结果捆绑到一个文件中,但是我遇到了一些babelHelpers对象的问题。

rollup.config.js:

export default {
  entry: './src/js/core.js',
  dest: './dist/output.js',
  format: 'iife',
  plugins: [babel({
    externalHelpers: true,
    runtimeHelpers: true,
    presets: ["es2015-rollup"]
  })],
  treeshake: false,
  useStrict: true
};

.babelrc:

{
  "presets": ["es2015-rollup"],
  "plugins": [
    "transform-class-properties",
    "transform-es2015-classes",
    "external-helpers-2"
  ]
}

和package.json的一部分:

"scripts": {
    "start": "npm-run-all --parallel rollup:watch lint:watch",
    "rollup": "rollup -c",
    "rollup:watch": "rollup -c -w",
    "lint": "esw rollup.config.* src/js/** --color",
    "lint:watch": "npm run lint -- --watch"
},
"dependencies": {
    "babel-helpers": "^6.16.0",
    "babel-plugin-external-helpers": "^6.18.0",
    "babel-plugin-external-helpers-2": "^6.3.13",
    "babel-plugin-transform-class-properties": "^6.19.0",
    "babel-plugin-transform-es2015-classes": "^6.18.0",
    "babel-plugin-transform-runtime": "^6.15.0",
    "babel-polyfill": "^6.16.0",
    "babel-preset-es2015-rollup": "^1.2.0",
    "babel-preset-latest": "^6.16.0",
    "eslint": "^3.11.1",
    "eslint-plugin-import": "^2.2.0",
    "eslint-watch": "^2.1.14",
    "npm-run-all": "^3.1.2",
    "rollup": "^0.36.4",
    "rollup-plugin-babel": "^2.6.1",
    "rollup-plugin-uglify": "^1.0.1",
    "rollup-watch": "^2.5.0"
}

core.js:

var configOptions = {
  range: [0, 5],
  arg: "speak",
  options: ["listen", "mute", "speak"]
};

function updateOptions(opt) {
  if (configOptions.range == undefined) {
    configOptions.range = opt.range;
  }
}

updateOptions({});

class Hello {
  print() {
  }
}

new Hello().print();

捆扎输出:

(function () {
'use strict';

var configOptions = {
  range: [0, 5],
  arg: "speak",
  options: ["listen", "mute", "speak"]
};

function updateOptions(opt) {
  if (configOptions.range == undefined) {
    configOptions.range = opt.range;
  }
}

updateOptions({});

var Hello = function () {
  function Hello() {
    babelHelpers.classCallCheck(this, Hello);
  }

  babelHelpers.createClass(Hello, [{
    key: "print",
    value: function print() {}
  }]);
  return Hello;
}();

new Hello().print();

}());

正如你在core.js中看到的那样,我正在使用ES6类。我希望babel只为已用过的物品添加polyfill。目前我只使用类,我希望babel只使用checkClassCall和“class”功能的其他功能。但它为我的最终捆绑添加了整个polyfill功能。

所以我做了一些研究,发现了“外部助手-2”和选项: externalHelpers:真 runtimeHelpers:真

它包含了babelHelpers中的每个babel功能,但我不知道如何使用我最终IIFE顶部的所有函数生成对象。

修改

如果我使用transform-runtime,那么我在控制台中得到它

将'babel-runtime / helpers / classCallCheck'视为外部依赖 将'babel-runtime / helpers / createClass'视为外部依赖 在options.globa中没有为外部模块'babel-runtime / helpers / classCallCheck'提供名称 ls - 猜测'_classCallCheck' 在options.globals中没有为外部模块'babel-runtime / helpers / createClass'提供名称 - 猜测'_createClass'

还将_classCallCheck和_createClass添加到最终汇总IIFE中的参数

2 个答案:

答案 0 :(得分:1)

这就是我如何配置babel for rollup,可能适合你:

{
    presets        : [['es2015', {"modules": false}]], 
    runtimeHelpers : true,
    exclude        : 'node_modules/**',
    plugins        : ["external-helpers"]
}

如果非常重要,则使用es2015代替es2015-rollup

答案 1 :(得分:0)

尝试从Rollup.js配置中删除externalHelpersruntimeHelpers选项。 es2015-rollup预设已包含帮助程序,因此只需使用它就足够了。

更新了Rollup.js配置:

export default {
  entry: './src/js/core.js',
  dest: './dist/output.js',
  format: 'iife',
  plugins: [babel({
    presets: ["es2015-rollup"]
  })],
  treeshake: false,
  useStrict: true
};