理由
私の場合、既に AMD の読み込みをサポートしているライブラリ ( ) に対して、requirejs
ので依存関係を指定したことが原因でした。その結果、ジョブの実行後にコード全体がバイパスされます。shim
perfect-scrollbar
define
grunt-contrib-requirejs
基本的に、requirejs ファイルを連結するにgrunt-contrib-requirejs
は、
// change this:
define(['d3'],function(d3){...});
// into this:
define('d3', ['d3'],function(d3){...});
内部perfect-scrollbar
には、すでに
(function (factory) {
'use strict';
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory); // <-------------------------- this part
// after minification would become:
// define('PerfectScrollbar', ['jquery'], factory);
} else if (typeof exports === 'object') {
factory(require('jquery')); // Node/CommonJS
} else {
factory(jQuery); // Browser globals
}
}(function ($) {
// perfect-scrollbar code here...
});
で指定したものと競合しましたshim
:
shim: {
"PerfectScrollbar": ['jquery', 'jquery.mousewheel']
}
そのため、実際に定義さrequirejs
れた部分にPerfectScrollbar
到達すると、既にその作業を行っていると想定して、その部分を飛び越えました。
解決
shim
既に AMD をサポートしているライブラリの依存関係を指定しないでください。
質問
しかし、依存関係を指定する必要がある場合はどうすればよいでしょうか? コードですでに指定されているjquery.mousewheel
上に必要です。jquery
答え
そのファイルに適切な require を要求し、独自の依存関係を正しく取得します。
define(['perfect-scrollbar', 'jquery.mousewheel'], function(){...});
必要なライブラリが AMD をサポートしている場合、
// inside jquery.mousewheel:
require(['jquery'], factory);
または、そうではありません
shim: {
"IDontSupportAMD": ['jquery']
}