Я пытаюсь заставить работать 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;
}());
Я не уверен, что это правильное поведение, я предполагал, что смогу использовать встряхивание дерева с файлом es6 export.js
и, следовательно, мне не нужно будет импортировать secondFunction()
из export.js
в наш связанный код.
Я пробовал несколько комбинаций настроек, но, похоже, ничто не может заставить работать дрожание дерева.
Стоит отметить, что я использую commonjs на сервере и пытаюсь использовать один и тот же файл, связанный с клиентом - вот почему у меня есть смесь cjs и es6.
export
вexport.js
(при условии, что отсутствующийs
является опечаткой). И вы это транспилируетеimport
. Вся идея свертки состоит в том, чтобы удалить всеimport
и заменить их одним единственным IIFE (или чем угодно) - person Lux   schedule 05.10.2017