1
我最近使用模塊導入/導出重寫了一堆舊JS到ES2015。我正在使用Rollup和Babel來回傳。ES2015模塊導入污染全局命名空間
該庫被集成到許多其他的網站,我沒有這麼控制我需要的代碼謹慎,以確保我不污染全局,不會引發錯誤等
gulpfile.js
var rollupBabel = rollupPluginBabel({
babelrc: false,
presets: [
"babel-preset-es2015-rollup"
]
});
merged.add(rollup({
entry: './js/bnr.js',
format: "es",
plugins: [
rollupBabel
]
})
.pipe(source('bnr.js'))
.pipe(gulp.dest('./compiled/js/')));
bnr.js
import * as helpers from "../lib/helpers";
import moment from "../../node_modules/moment/src/moment";
class Connect {
constructor(window, document) {
this.init();
}
init()
{
// Stuff happens here
}
}
輸出
// Helpers and what not here
var hookCallback;
function hooks() {
return hookCallback.apply(null, arguments);
}
// This is done to register the method called with moment()
// without creating circular dependencies.
function setHookCallback(callback) {
hookCallback = callback;
}
function isArray(input) {
return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
}
// The rest of moment.js
正如你可以看到所有的moment.js相關的代碼將被輸出沒有閉合/包裝,以保持它的全球性的。因此,我在消費網站上收到各種錯誤。
如何導入moment.js或重新配置gulp任務以導入時刻而不污染全局命名空間?
感謝
這看起來像一個commonsjs模塊或暗含模塊範圍的東西 - 它們不是全局變量。嘗試使用UMD作爲輸出格式。 – Bergi