我在通過gulp以browserify構建的項目中加載jquery-ui
時出現問題。在我的代碼中,我有:在browserify/gulp構建中未定義的jQuery錯誤
import $ from "jquery";
import "jquery-ui";
錯誤是Uncaught ReferenceError: jQuery is not defined
。望着jQuery的UI代碼在發生錯誤的時候,我看到:
(function(factory) {
if (typeof define === "function" && define.amd) {
// AMD. Register as an anonymous module.
define([ "jquery", "./version" ], factory);
} else {
// Browser globals
factory(jQuery); // <<--- error raised here
}
}(function($) {
...
的核心問題是,而jquery
進口定義$
,它並沒有設置全局變量jQuery
。
我見過很多類似的問題的解決方案,涉及創建一個加載jQuery的填充,但這個問題似乎不同。這並不是說jQuery沒有被加載(否則$
也將是未定義的),這是jquery-ui期望jQuery
作爲全局別名。
我也看到很多建議手動設置window.jQuery = $
或類似的。這在我的情況下也不起作用,因爲正在運行的代碼包是由browserify創建的,所以我不能控制創建模塊的順序,所以我不清楚在我的代碼中的哪個位置我會發表這樣的聲明。
僅供參考,我一飲而盡任務是:
browserify(
"./app/es/app.es",
{
debug: true,
}
)
.transform(babel)
.on("error", function(err) { gutil.log(err); this.emit("end"); })
.pipe(source("build.js"))
.pipe(buffer())
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(sourcemaps.write("./"))
.pipe(gulp.dest("./build/js"));
我試圖插入一個browserify-shim
具有以下配置變換:
"browserify-shim": {
"jquery": "jQuery"
},
,但它並沒有改變觀察到的行爲。
我很欣賞的解釋是什麼Babel變換正在使用'import'語句,所以謝謝! –