要main.js
在所有页面上加载自定义文件(以RequireJS方式),这是一种好方法:
1)建立 main.js
main.js
在主题文件夹中创建
<theme_dir>/web/js/main.js
具有以下内容:
define([
"jquery"
],
function($) {
"use strict";
// Here your custom code...
console.log('Hola');
});
简而言之:我们在开始时声明依赖项,例如"jquery"
。我们将变量名称定义为函数的参数,以在函数中使用依赖项,例如"jquery" --> $
。我们将所有自定义代码放入function($) { ... }
。
2)声明main.js
一个requirejs-config.js
文件
requirejs-config.js
在主题文件夹中创建一个文件:
<theme_dir>/requirejs-config.js
具有以下内容:
var config = {
// When load 'requirejs' always load the following files also
deps: [
"js/main"
]
};
"js/main"
是我们习惯的道路main.js
。不需要“ .js”扩展名。
我们requirejs-config.js
将与requirejs-config.js
Magento中定义的其他对象合并。
RequireJS将main.js
在每个页面上加载我们的文件,以解决依赖关系并以异步方式加载文件。
可选:包括第三方库
这是包括第三方库的方法。
1)将库添加到web/js
:
<theme_dir>/web/js/vendor/jquery/slick.min.js
2)打开requirejs-config.js
并添加以下内容:
var config = {
deps: [
"js/main"
],
// Paths defines associations from library name (used to include the library,
// for example when using "define") and the library file path.
paths: {
'slick': 'js/vendor/jquery/slick.min',
},
// Shim: when you're loading your dependencies, requirejs loads them all
// concurrently. You need to set up a shim to tell requirejs that the library
// (e.g. a jQuery plugin) depends on another already being loaded (e.g. depends
// on jQuery).
// Exports: if the library is not AMD aware, you need to tell requirejs what
// to look for so it knows the script has loaded correctly. You can do this with an
// "exports" entry in your shim. The value must be a variable defined within
// the library.
shim: {
'slick': {
deps: ['jquery'],
exports: 'jQuery.fn.slick',
}
}
};
它看起来比实际要复杂。
3)在下面添加依赖项main.js
:
define([
'jquery',
'slick'
],
function($) {
// ...
});