RequireJS - 优化器


在本章中,我们将讨论 RequireJS 中的优化。RequireJS 中的优化器具有以下特征 -

优化器是Node 和 Nashornr.js适配器的组件。它被开发为构建过程的一部分,而不是为了开发过程。

例子

将r.js下载到项目文件夹中后,该文件夹的结构应如下所示 -

projectfolder/
   |-->index.html
   |-->CSS/
      |--->main.css
      |--->other.css
   |-->libs
      |--->require.js
      |--->main.js
         |--->dependent1.js
         |--->dependent2.js
         |--->dependent3.js

您的 HTML 文件将如下所示 -

<html>
   <head>
      <script data-main = "libs/main" src = "libs/require.js"></script>
   </head>
   
   <body>
      <h1> RequireJS Sample Page </h1>
   </body>
</html>

您的main.js文件将如下所示 -

require(["dependent1", "dependent2", "dependent3"], function (dependent1, dependent2, 
   dependent3) {
});

您的main.css文件将如下所示 -

@import url("other.css");

.app {
   background: transparent url(../../img/app.png);
}

优化器的基本设置

您可以使用命令行参数或配置文件构建属性来设置项目,两者可以相互交换。

以下是命令行的语法 -

node r.js -o baseUrl = . paths.jquery = content/path/jquery 
   name = main out = main-built.js

以下是构建配置文件的语法 -

({
   baseUrl: ".",
  
   paths: {
      jquery: "content/path/jquery"
   },
   
   name: "main",
   out: "main-built.js"
})

之后,您可以在命令行中将构建配置文件名称传递给优化器,如下所示 -

node r.js -o build.js

命令行参数语法存在一些缺点。结合使用命令行参数或配置文件构建属性可以克服这些缺点。

优化单个 JS 文件

要优化单个 JS 文件,您需要创建一个包含其所有依赖项内容的 JS 文件。您的文件应如下所示 -

({
   baseUrl: "js/shop",
   paths: {
      "jquery": "jquery",
      "backbone": "backbone",
      "underscore": "underscore"
   },
   
   shim: {
      "backbone": {
         "department": ["underscore", "jquery"],
         "dependent": "Backbone"  
      },
      
      "underscore": {
         exports: "_" 
      }
   },
   
   name: "../main",
   out: "../built/js/main.js"
})

现在,您可以创建main.js文件,其中包含应用程序的所有依赖项。该文件用于 HTML 文件中,通过一次请求加载所有 JS 文件。注意,创建的文件不应该在源代码目录中;这些文件应该位于项目的副本中。

CDN资源使用情况

优化器不使用网络资源/CDN(内容分发网络)加载脚本。如果需要使用 CDN 加载脚本,那么您需要将这些文件映射到模块名称并将文件下载到本地文件路径。您可以在构建配置文件的路径配置中使用特殊单词“empty”,如以下语法所示 -

({
   baseUrl: "js",
   name: "mainCDN",
   out: "js/mainCDN-built.js",
   
   paths: {
      jquery: "empty:"
   }
   
})

主文件如下所示 -

requirejs.config({
   paths: {
      'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'
   }
});

require(['jquery'], function ($) {
});

优化单个 CSS 文件

CSS 文件直接在命令行中使用以下参数进行优化,如下所示 -

node ../../r.js -o cssIn = main.css out = main-built.css

CSS 文件也可以在构建文件中使用相同的属性进行优化,如下所示 -

...
cssIn:"main.css",
out:"main-built.css"
...

上述两种方法都是允许的,并且将创建一个名为projectfolder/css/mainbuild.css的文件。该文件将包含 main.css 的内容、正确调整的 url() 路径并删除注释。

优化整个项目

优化器使用构建配置文件来优化所有cssjs文件。在以下示例中,将创建build.js文件。

({
   baseUrl: "js/shop",
   appDir: '.',
   paths: {
      "jquery": "jquery",
      "backbone": "backbone",
      "underscore": "underscore"
   },
   
   shim: {
      "backbone": {
         "deps": ["underscore", "jquery"],
         "exports": "Backbone"  
      },
      
      "underscore": {
         exports: "_" 
      }
   },
   
   optimizeCss: "standard.keepLines",
   modules: [
      {
         name: "app"
      }
   ],
   
   dir: "../built"
})

build.js文件指示 RequireJS 将所​​有应用程序文件夹(appDir 参数)复制到构建的输出文件夹(dir 参数),并将所有优化应用于位于输出文件夹中的文件运行以下命令在应用程序文件夹中构建配置文件 -

node r.js -o build.js