0

我正在尝试让 rollup、commonjs、es6 和 tree shaking 正常工作。

目前,我有以下构建脚本:

'use strict';

const rollup = require('rollup');
const resolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');

rollup.rollup({
  input: 'main.js',
  format: 'iife',
  plugins: [
    {
      transform(code, id) {
        return code;
      }
    },
    resolve({
      extensions: ['.js', '.jsx']
    }),
    commonjs({
      extensions: ['.js', '.jsx']
    })
  ]
})
.then(({ generate }) => generate({
  format: 'iife',
  name: 'test',
}))
.then(({ code }) => console.log(code));

加载以下main.js文件

const { firstFunction } = require('./exports');

firstFunction();

export.js文件

export function firstFunction() {
  return this.name;
}

export function secondFunction() {
  return this.name;
}

输出以下内容:

var test = (function () {
'use strict';

function firstFunction$1() {
  return this.name;
}

function secondFunction() {
  return this.name;
}


var exports$1 = Object.freeze({
    firstFunction: firstFunction$1,
    secondFunction: secondFunction
});

var require$$0 = ( exports$1 && undefined ) || exports$1;

const { firstFunction } = require$$0;

firstFunction();

var main = {

};

return main;

}());

我不确定这是否是正确的行为,我假设我可以对 es6export.js文件使用 tree-shaking,因此不需要在我们的捆绑代码中导入secondFunction()from 。export.js

我已经尝试了许多设置组合,但似乎没有任何东西能够让摇树工作。

值得注意的是,我在服务器上使用 commonjs 并尝试使用捆绑在客户端上的相同文件——这就是我混合使用 cjs 和 es6 的原因。

4

1 回答 1

1

正如 Lux 在评论中所说,问题是你混合了 cjs 和 ES 模块。似乎rollup-plugin-commonjs不会撼动进口。

您应该首先将您的文件与汇总捆绑并使用 cjs 作为输出格式。你然后require捆绑。

这应该让你的 javascript treeshaken 并准备好节点。

于 2017-10-05T00:25:32.997 回答