jquery-ui
をgulp経由でbrowserifyでビルドされたプロジェクトにロードする際に問題が発生しました。私のコードでは、私は持っています:browserify/gulpビルドで未定義のjQueryエラー
エラーは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をロードするためのshimの作成に関連する同様の問題に対する多くのソリューションがありますが、この問題は異なるようです。 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"
},
それが観測された動作を変更しませんでした。
import $ from 'jquery';
window.jQuery = window.$ = require('jquery');
import 'jquery-ui';
=>
'use strict';
var _jquery = require('jquery');
var _jquery2 = _interopRequireDefault(_jquery);
require('jquery-ui');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
window.jQuery = window.$ = require('jquery');
考えられる解決策:
1)require
を使用
私は何の説明に感謝をバベル変換は 'import'ステートメントでやっているので、ありがとう! –