Require.js配置全局和配置非amd規範JS
- 2020 年 2 月 19 日
- 筆記
我們來說全局配置,我們知道導入require.js之後會設置data-main屬性來執行入口文件,然後再入口文件中進行require的配置。
但是比如我們有五個頁面,data-main="main.js",那五個頁面都要導入這個main.js,因為main.js中有配置資訊,但是我們五個頁面的頁面js都必須要寫在main.js中了,這樣反而不好,那有什麼辦法呢?
全局配置方案:
我們把配置資訊單獨寫一個js文件,然後再main.js中通過require函數配置依賴項來解決,程式碼如下。
config.js:配置文件
require.config({ baseUrl: 'js', paths: { jquery: 'lib/jquery-3.4.1.min', module1: 'script/module1', module2: 'script/module2', module3: 'script/module3', normal:'script/normal' }, });
然後再main.js文件中,導入此文件即可,程式碼如下:
main.js:入口文件
require(['/js/lib/config.js'], function () { require(['jquery', 'module1', 'module2', 'module3'], function ($, module1, module2, module3) { $("#module1").click(function () { module1.fun("module-1"); }); $("#module2").click(function () { module2.fun("module-2"); }); $("#module3").click(function () { module3.fun("module-3"); }); }) })
這樣就實現配置就是單獨的js文件了,我們要使用的時候用require添加config.js的依賴,就可以了。
可以根據上篇的程式碼來對比一下有什麼不同。
配置非AMD規範JS:
我們知道要配置模組,js文件必須要使用AMD規範來編寫,就是加上define函數,主動返回函數等操作。
但是我們以前編寫的js,肯定沒有這些功能,修改起來又比較麻煩,所以需要配置非AMD規範的JS。
需要配置shim屬性,程式碼如下:
config.js程式碼:
require.config({ baseUrl: 'js', paths: { jquery: 'lib/jquery-3.4.1.min', module1: 'script/module1', module2: 'script/module2', module3: 'script/module3', normal:'script/normal' }, shim: { normal: { deps: ['jquery'],//依賴項 init: function () { return { render: render, initial: initial }//normal里的函數 } } } });
normal.js程式碼:
function render(name) { console.log(name); } function initial(name) { console.log(name); }
這裡面的normal就是非AMD規範的js,我們先在paths中把路徑,名稱配置好,然後再shim中配置對外返回的函數和變數等,比如上面就返回normal.js中的render和initial兩個函數。
然後調用還是按照以前的方法一樣,程式碼如下:
main.js程式碼:
require(['/js/lib/config.js'], function () { require(['jquery', 'normal'], function ($, normal) { normal.render("render"); normal.initial("initial"); }) })
配置全局屬性和配置非AMD規範的流程就是這樣的,只要大家多去用了幾次,就熟悉了。