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规范的流程就是这样的,只要大家多去用了几次,就熟悉了。