如何让 Rollup 转换 require() 调用?
How to get Rollup to transform require() calls?
我正在尝试使用 Rollup 构建我的项目。我得到了它的大部分工作(包括 Angular 2),但我无法转换我的一些 polyfill,因为它们在其中调用了 require()
。即使使用 rollup-plugin-node-resolve
和 rollup-plugin-commonjs
,它也根本不会触及 require
。
那么我该如何改造它们呢?我可以使用的解决方法是浏览器化 polyfill,然后在汇总过程中包含浏览器化的包,但这需要大量额外的插件并且不是一个干净的解决方案,特别是因为我认为汇总应该能够理解CommonJS.
这是 Node.js 的一些测试代码:
"use strict";
let rollup = require("rollup");
let fs = require("fs");
let resolve = require("rollup-plugin-node-resolve");
let commonjs = require("rollup-plugin-commonjs");
rollup.rollup({
entry: "src/main.js",
plugins: [
resolve({
jsnext: true,
main: true
}),
commonjs({
include: '**', // also tried src/** node_modules/** and a lot of other stuff.
// Leaving this undefined stops rollup from working
}),
]
}).then(function(bundle) {
bundle.write({
format: "iife",
dest: "www/bundle.js"
})
});
然后使用一个简单的文件 src/main.js
,它只包含行 require("./some-file.js");
和一个包含任何内容的 src/some-file.js
来演示问题。
我在 rollup-gitter 的好心人的帮助下解决了它。
我需要将 moduleName
添加到 bundle.write
选项,如下所示:
bundle.write({
format: "iife",
dest: "www/bundle.js"
moduleName: "someModule"
})
我正在尝试使用 Rollup 构建我的项目。我得到了它的大部分工作(包括 Angular 2),但我无法转换我的一些 polyfill,因为它们在其中调用了 require()
。即使使用 rollup-plugin-node-resolve
和 rollup-plugin-commonjs
,它也根本不会触及 require
。
那么我该如何改造它们呢?我可以使用的解决方法是浏览器化 polyfill,然后在汇总过程中包含浏览器化的包,但这需要大量额外的插件并且不是一个干净的解决方案,特别是因为我认为汇总应该能够理解CommonJS.
这是 Node.js 的一些测试代码:
"use strict";
let rollup = require("rollup");
let fs = require("fs");
let resolve = require("rollup-plugin-node-resolve");
let commonjs = require("rollup-plugin-commonjs");
rollup.rollup({
entry: "src/main.js",
plugins: [
resolve({
jsnext: true,
main: true
}),
commonjs({
include: '**', // also tried src/** node_modules/** and a lot of other stuff.
// Leaving this undefined stops rollup from working
}),
]
}).then(function(bundle) {
bundle.write({
format: "iife",
dest: "www/bundle.js"
})
});
然后使用一个简单的文件 src/main.js
,它只包含行 require("./some-file.js");
和一个包含任何内容的 src/some-file.js
来演示问题。
我在 rollup-gitter 的好心人的帮助下解决了它。
我需要将 moduleName
添加到 bundle.write
选项,如下所示:
bundle.write({
format: "iife",
dest: "www/bundle.js"
moduleName: "someModule"
})