Heim >Web-Frontend >js-Tutorial >Zusammenfassung der Verwendung von Require.js

Zusammenfassung der Verwendung von Require.js

一个新手
一个新手Original
2017-10-26 09:48:271788Durchsuche

1. Warum require.js verwenden?

Wenn eine Seite mehrere js-Dateien lädt, wird die Der Browser stoppt das Rendern der Webseite, desto länger verliert die Webseite die Reaktion. Zweitens muss die Ladereihenfolge strikt gewährleistet sein wird schwierig zu schreiben und zu pflegen sein.

require.js soll diese beiden Probleme lösen:

  1.  js asynchrones Laden implementieren von Dateien, um Reaktionsverluste auf Webseiten zu vermeiden;

  2.   verwaltet Abhängigkeiten zwischen Modulen, um das Schreiben und Warten von Code zu erleichtern.

2. Laden von require.js

Kapitel Schritt eins: Gehen Sie zur offiziellen Website, um die neueste Version herunterzuladen, und legen Sie sie direkt auf die Seite zum Laden


 <script src="js/require.js"></script>

Das Laden dieser Datei kann möglich sein Damit die Webseite nicht mehr reagiert, können Sie sie zum Laden am Ende der Seite platzieren oder wie folgt schreiben:


 <script src="js/require.js" defer async="true" ></script>

Das Attribut async gibt an, dass diese Datei asynchron geladen werden muss, um zu verhindern, dass die Webseite nicht mehr reagiert. Der IE unterstützt dieses Attribut nicht und unterstützt nur die Verzögerung, sodass auch die Verzögerung geschrieben wird.

Nach dem Laden von require.js besteht der nächste Schritt darin, unseren eigenen Code zu laden, der den Eingang darstellt und als Hauptmodul bezeichnet werden kann. Wenn die Datei main.js heißt, es wird wie folgt geschrieben. Das ist es:


<script src="js/require.js" data-main="js/main"></script>    .js后缀可以省略

3. Wie schreibe ich das Hauptmodul

Wenn das Hauptmodul von jQuery abhängt, können Sie es so schreiben:

 require([&#39;jquery&#39;], function ($){
   alert($);
});

4. require.config()-Methode

require.config({
  paths: {
    "jquery": "jquery.min",
    "underscore": "underscore.min",
    "backbone": "backbone.min"
  }
});

Der obige Code gibt die Dateinamen der drei Module an. Der Pfad ist standardmäßig im gleichen Verzeichnis wie main .js (js-Unterverzeichnis). Wenn sich diese Module in anderen Verzeichnissen befinden, beispielsweise im Verzeichnis js/lib, gibt es zwei Möglichkeiten, sie zu schreiben.

  • Eine besteht darin, die Pfade einzeln anzugeben

require.config({
  paths: {
    "jquery": "lib/jquery.min",
    "underscore": "lib/underscore.min",
    "backbone": "lib/backbone.min"
  }
});
  •  Die andere Möglichkeit besteht darin, das Basisverzeichnis (baseUrl) direkt zu ändern.

require.config({
  baseUrl: "js/lib",
  paths: {
    "jquery": "jquery.min",
    "underscor: "underscore.min",
    "backbone": "backbone.min"
  }
});
  • Wenn sich ein Modul auf einem anderen Host befindet, können Sie dessen URL auch direkt angeben, z. B.

require.config({
  paths: {
    "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
  }
});

So schreiben Sie das AMD-Modul

geladen von js übernehmen AMD-Spezifikationen. Mit anderen Worten: Das Modul muss gemäß den AMD-Vorschriften geschrieben sein.

Konkret muss das Modul mit einer bestimmten define()-Funktion definiert werden. Wenn ein Modul nicht von anderen Modulen abhängig ist, kann es direkt in der Funktion define() definiert werden.

// math.js
define(function (){
  var add = function (x,y){
    return x+y;
  };
  return {
    add: add
  };
});

Die Lademethode ist wie folgt:

 // main.js
require([&#39;math&#39;], function (math){
  alert(math.add(1,1));
});

Wenn dieses Modul auch von anderen Modulen abhängt, dann das erste von Der Parameter der Funktion define() muss ein Array sein, das die Abhängigkeiten des Moduls angibt.

 define([&#39;myLib&#39;], function(myLib){
  function foo(){
    myLib.doSomething();
  }
  return {     //返回模块中的函数
    foo : foo
  };
});

     当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。

六、加载非规范的模块(shim的使用方式)

 //  app.js
 function sayHello(name){
  alert(&#39;Hi &#39;+name);
}
 //  main.js
require.config({
  shim: {
    &#39;app&#39;: { //这个键名为要载入的目标文件的文件名,不能随便命名。
      exports: &#39;sayHello&#39; //exports的值为my.js提供的 对外接口的名称
    }
  }
});

require([&#39;app&#39;], function(sayHello) {
    alert(sayHello())  
})

      导出一个函数,意味着我们得到了一个javaScript类

      但是如果在my.js中写了很多function,整合成一个function有点麻烦,想直接导出?方法如下:

 // app.js
function sayHi(name){
    alert(&#39;Hi &#39;+name);
}
function sayHello(name){
    alert(&#39;Hiello  &#39;+name);
}
// main.js  
  require.config({
    shim: {
      app: {
        init: function() { //这里使用init将2个接口返回
          return {
            sayHi: sayHi,
            sayHello: sayHello
          }
        }
      }
    }
  });

  require([&#39;app&#39;], function(a) {
    a.sayHi(&#39;zhangsan&#39;);
    a.sayHello(&#39;lisi&#39;);
  });

     shim的有序导入

   require.config({  

    shim: {  
      &#39;jquery.ui.core&#39;: [&#39;jquery&#39;],  //表示在jquery导入之后导入
      &#39;jquery.ui.widget&#39;: [&#39;jquery&#39;],  
      &#39;jquery.ui.mouse&#39;: [&#39;jquery&#39;],  
      &#39;jquery.ui.slider&#39;:[&#39;jquery&#39;]
     },  
    paths : {    
       jquery : &#39;jquery-2.1.1/jquery&#39;,    
       domReady : &#39;require-2.1.11/domReady&#39;,    
       &#39;jquery.ui.core&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.core&#39;,    
       &#39;jquery.ui.widget&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.widget&#39;,    
       &#39;jquery.ui.mouse&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.mouse&#39;,    
       &#39;jquery.ui.slider&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.slider&#39; 
        }
  });    
 
  require([&#39;jquery&#39;, &#39;domReady&#39;,&#39;jquery.ui.core&#39;,&#39;jquery.ui.widget&#39;,&#39;jquery.ui.mouse&#39;,&#39;jquery.ui.slider&#39;],    function($) {            
      $("#slider" ).slider({              
       value:0,           
       min: 0,           
       max: 4,           
       step: 1,           
       slide: function( event, ui ) {}     
        });    
   }

Das obige ist der detaillierte Inhalt vonZusammenfassung der Verwendung von Require.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn