require.js學習記錄

1、簡介

官方對requirejs的描述:
RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.
即在瀏覽器中,require.js可以作為文件的模塊加載器,可以用在Node和Rhino環境中。
工作方式為:requireJS使用head.appendChild()將每一個依賴加載為一個script標簽。然后等待所有的依賴加載完畢,計算出模塊定義函數正確調用順序,再依次調用它們。

2、優點

(1)防止js加載阻塞頁面渲染
(2)管理模塊之間的依賴,便于管理和維護

3、使用介紹

(1)引入:

  • 方式一:使用data-main
<script data-main="js/main" src="js/require.js"></script>

加載requirejs腳本的script標簽加入了data-main屬性,這個屬性指定的js將在加載完reuqire.js后處理。把require.config的配置加入到data-main后,就可以使每一個頁面都使用這個配置,然后頁面中就可以直接使用require來加載所有的短模塊名。
data-main還有一個重要的功能,當script標簽指定data-main屬性時,require會默認的將data-main指定的js為根路徑

  • 方式二:直接script嵌入
<script src="js/require.js"></script><script src="js/app.js"></script>

(2)require.config配置

在main.js中進行require.config的配置。如如下主要的配置參數:

  • baseUrl: 設置根目錄
  • paths:配置模塊的加載位置。可以給模塊定義一個更好記的名字。還可以配置多個路徑,如果遠程CDN沒有加載成功,則加載本地的文件。
require.config({paths : {"jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery", "js/jquery"],"user" : "js/user"   }
})
  • shim: 通過require加載的模塊一般都需要符合AMD規范即使用define來申明模塊,但是部分時候需要加載非AMD規范的js,這時候就需要用到另一個功能:shim。
require.config({shim: {"underscore" : {exports : "_";},"jquery.form" : {deps : ["jquery"]}}
})

除了可以在require.js加載完畢后,通過require.config進行配置之外,在require.js加載之前,定義一個全局的對象變量 require 來事先定義配置參數。然后在require.js被瀏覽器加載完畢后,便會自動繼承之前配置的參數。

<script>var require = {baseUrl: 'js/',paths: {'jquery': 'http://xxx.xxxx.com/js/jquery.min','index': 'index'},deps:[index]};</script><script src="js/require.js"></script>

除了上面3個常用的配置項,還有其他的:
urlArgs:解決版本控制問題。urlArgs: 'ver=0.1.2'。還可以用來實現在文件后增加隨機數的方式,忽略瀏覽器緩存。urlArgs: new Date().getTime(),
waitSeconds: 設置加載腳本的超時時間
deps: 聲明require.js加載完成后便會自動加載的模塊
callback: 當deps中自動加載模塊加載完成時,處罰的回調
map: map告訴RequireJS在任何模塊之前,都先載入這個模塊,這樣別的模塊依賴于css!../style/1.css這樣的模塊都知道怎么處理了

(3)require和define

這兩個是最常用的命名。define用于定義模塊。require用于加載模塊及配置文件。在requirejs中一個文件就是一個模塊,文件名就是該模塊的ID。

  • define:可以單獨定義鍵值隊數據,作為配置文件來使用;
define({'name':'zhangsan','age':'20'});

還可以定義依賴的關系:

4、壓縮

(1) r.js

使用r.js來進行壓縮時,需要指定build.js文件。build.js主要配置如下:

  ({baseUrl: './js/pages',    //相對于appDir,代表要查找js文件的起始文件夾,下文所有文件路徑的定義都是基于這個baseUrl的appDir: './',    //項目根目錄dir: './outdir',   //輸出目錄,全部文件打包后要放入的文件夾(如果沒有會自動新建的)/* 有了dir,就不能使用out配置項了,你在編譯時它有非常明確的提示 *//*"appDir" is not compatible with "out". Use "dir" instead. appDir is used to copy whole projects, where "out" with "baseUrl" is used to just optimize to one file.*//*"appDir" 和 "out"是不兼容的,需要用"dir"代替, "appDir"是用來拷貝整個項目的,"out"和"baseUrl"僅是用來優化一個文件的*/modules: [//要優化的模塊 —— 里面的配置項即各頁面的 相對baseUrl路徑的 省略后綴“.js”的 入口文件(入口文件 ---- 即加載頁面時引入require.js的script標簽上data-main屬性所指定的文件)//該屬性必不可少,因為一個程序至少需要有一個入口{ name:'main'},{ name:'index'} ],out: 'index-build.js',  //輸出文件名name:'main',fileExclusionRegExp: /^(r|build)\.js|.*\.scss$/,   //正則匹配過濾文件,匹配到的文件將不會被輸出到輸出目錄去,這里過濾掉的是 r.js、build.js、*.scss三類文件optimizeCss: 'standard',removeCombined: true, //如果為true,優化器將從輸出目錄中刪除已合并的文件paths: { //各模塊相對baseUrl的路徑,直接從require.config的path配置中烤取即可"underscore": "../libs/underscore/underscore-min","backbone": "../libs/backbone/backbone-min",},shim:{// 配置不符合AMD規范的模塊,直接從require.config的shim配置中烤取即可"underscore": {exports: "_"},"backbone": {deps: ["underscore", "jquery"],exports: "Backbone"},} })

執行r.js -o build.js 即可實現壓縮。
在鏈接https://www.cnblogs.com/rubyl... 中有很好的示例,可以參看學習。

(2) 使用gulp

安裝好gulp和gulp-requirejs-optimize
gulpfile的配置如下:

var gulp = require('gulp');
var requirejsOptimize = require('gulp-requirejs-optimize');
gulp.task('rjs', function(){return gulp.src('src/js/*.js').pipe(requirejsOptimize({optimize: 'none',mainConfigFile: 'src/config.js'})).pipe(gulp.dest('dist/js/'));
});

5、加載其他的文件

(1) 加載css
加載css需要使用require-css插件(https://github.com/guybedford...
首先需要設置

map: {'*': {'css': 'require-css/css' // or whatever the path to require-css is}
}

在define中使用就可以了

define(['css!styles/main'], function() {//code that requires the stylesheet: styles/main.css
});

(2) 加載其他

define(['text!review.txt','image!cat.jpg'],function(review,cat){console.log(review);document.body.appendChild(cat);});

使用text和image插件,則是允許require.js加載文本和圖片文件。類似的插件還有json和mdown,用于加載json文件和markdown文件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253337.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS-AFNetworking參數和多文件同時上傳【多文件上傳】

1. 前言 在項目開發中&#xff0c;我們經常需要上傳文件&#xff0c;例如&#xff1a;上傳圖片&#xff0c;上傳各種文件&#xff0c;而有時也需要將參數和多個文件一起上傳&#xff0c;不知道大家的項目中遇到了沒有&#xff0c;我在最近的項目中&#xff0c;就需要這樣的一個…

智能音箱 之 平臺方案簡介

智能音箱&#xff0c;被認為是物聯網時代的入口&#xff0c;在去年成為了各大廠商爭相投入的風口。在當今互聯網時代&#xff0c;它不僅僅是一臺單純的音樂播放器&#xff0c;在其背后支撐的 AI 技術才是整個產品的核心&#xff0c;也是各大公司覬覦物聯網入口的最根本原因。經…

Linux Kconfig及Makefile學習

內核源碼樹的目錄下都有兩個文檔 Kconfig &#xff08;2.4版本是Config.in&#xff09;和Makefile。分布到各目錄的Kconfig構成了一個分布式的內核配置數據庫&#xff0c;每個Kconfig分別描述了 所屬目錄源文檔相關的內核配置菜單。在內核配置make menuconfig時&#xff0c;從K…

Linux編程 23 shell編程(結構化條件判斷 命令if -then , if-then ... elif-then ...else,if test)...

一.概述 在上一篇里講到了shell腳本&#xff0c;shell按照命令在腳本中出現的順序依次進行處理&#xff0c;對于順序操作已經足夠了&#xff0c;但許多程序要求對shell腳本中的命令加入一些邏輯流程控制&#xff0c;這樣的命令通常叫做 結構化命令。 1.1 使用if - then語句 --最…

Scala-Spark digamma stackoverflow問題

這兩天在用spark做點擊率的貝葉斯平滑&#xff0c;參考雅虎的論文進行了一番嘗試。 先上代碼&#xff1a; 1 # click_count, show_count # this method takes time2 def do_smooth(data_list):3 import scipy.special as sp4 a, b, i 1.0, 1.0, 05 da, db a, b6 …

IIS接口詳細介紹

1. 概述 I2S Inter-IC Sound Integrated Interchip Sound IIS&#xff0c;是飛利浦在1986年定義&#xff08;1996年修訂&#xff09;的數字音頻傳輸標準&#xff0c;用于數字音頻數據在系統內器件之間傳輸&#xff0c;例如編解碼器CODEC、DSP、數字輸入/輸出接口、ADC、DAC…

UVA - 10934 Dropping water balloons(裝滿水的氣球)(dp)

題意&#xff1a;有k個氣球&#xff0c;n層樓&#xff0c;求出至少需要多少次實驗能確定氣球的硬度。氣球不會被實驗所“磨損”。 分析&#xff1a; 1、dp[i][j]表示第i個氣球&#xff0c;測試j次所能確定的最高樓層。 2、假設第i-1個氣球測試j-1次所確定的最高樓層是a, 若第i個…

繼承進階

先講一個例子&#xff1a; #老師有生日&#xff0c;怎么組合哪&#xff1f; class Birthday: # 生日def __init__(self,year,month,day):self.year yearself.month monthself.day dayclass Teacher: # 老師<br>def __init__(self,name,birth):self.name nameself.b…

PCM接口詳細介紹--TDM方式

1. 概述 PCM = Pulse Code Modulation 是通過等時間隔(即采樣率時鐘周期)采樣將模擬信號數字化的方法。圖為4 bit 采樣深度的PCM數據量化示意圖: PCM數字音頻接口,說明接口傳輸的音頻數據是通過PCM方式采樣得到的,區別于PDM形式;IIS傳輸的也是PCM類型數據,屬于其一個特…

網站同源策略

所謂"同源"指的是"三個相同"&#xff1a;協議&#xff0c;域名&#xff0c;端口。 舉例來說&#xff0c;http://www.example.com/dir/page.html這個網址&#xff0c;協議是http://&#xff0c;域名是www.example.com&#xff0c;端口是80&#xff08;默認端…

Kconfig文件結構(圖文)簡介

1 Kconfig和Makefile 毫不夸張地說&#xff0c;Kconfig和Makefile是我們瀏覽內核代碼時最為依仗的兩個文件。基本上&#xff0c;Linux 內核中每一個目錄下邊都會有一個Kconfig文件和一個Makefile文件。Kconfig和Makefile就好似一個城市的地圖&#xff0c;地圖引導我們去 認識一…

PDM接口介紹

1. 概述 PDM Pulse Density Modulation是一種用數字信號表示模擬信號的調制方法。 PDM則使用遠高于PCM采樣率的時鐘采樣調制模擬分量&#xff0c;只有1位輸出&#xff0c;要么為0&#xff0c;要么為1。因此通過PDM方式表示的數字音頻也被稱為Oversampled 1-bit Audio。相比P…

js正則學習分享

http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.htmlhttp://www.cnblogs.com/tylerdonet/p/4262251.html //正整數 /^[0-9]*[1-9][0-9]*$/; //負整數 /^-[0-9]*[1-9][0-9]*$/; //正浮點數 /^(([0-9]\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9])|([0-9]*[1…

Linux系統下UDP發送和接收廣播消息小例子

分類&#xff1a; 網絡通信 2013-01-07 10:54 1336人閱讀 評論(6) 收藏 舉報 [cpp] view plaincopyprint?// 發送端 #include <iostream> #include <stdio.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types.h>…

Kaggle 泰坦尼克

入門kaggle&#xff0c;開始機器學習應用之旅。 參看一些入門的博客&#xff0c;感覺pandas&#xff0c;sklearn需要熟練掌握&#xff0c;同時也學到了一些很有用的tricks&#xff0c;包括數據分析和機器學習的知識點。下面記錄一些有趣的數據分析方法和一個自己擼的小程序。 1…

語音交互設備 前端信號處理技術和語音交互過程介紹

一、前端信號處理 1. 語音檢測&#xff08;VAD&#xff09; 語音檢測&#xff08;英文一般稱為 Voice Activity Detection&#xff0c;VAD&#xff09;的目標是&#xff0c;準確的檢測出音頻信號的語音段起始位置&#xff0c;從而分離出語音段和非語音段&#xff08;靜音或噪…

css中偽類與偽元素的區別

一&#xff1a;偽類&#xff1a;1:定義&#xff1a;css偽類用于向某些選擇器添加特殊效果。 偽類其實與普通的css類相類似&#xff0c;可以為已有的元素添加樣式&#xff0c;但是他只有處于dom無法描述的狀態下才能為文檔樹中的元素添加樣式&#xff0c;所以將其稱為偽類。 2:偽…

【BZOJ1500】[NOI2005]維修數列 Splay

【BZOJ1500】[NOI2005]維修數列 Description Input 輸入的第1 行包含兩個數N 和M(M ≤20 000)&#xff0c;N 表示初始時數列中數的個數&#xff0c;M表示要進行的操作數目。第2行包含N個數字&#xff0c;描述初始時的數列。以下M行&#xff0c;每行一條命令&#xff0c;格式參見…

bzoj2588: Spoj 10628. Count on a tree(樹上第k大)(主席樹)

每個節點繼承父節點的樹&#xff0c;則答案為query(root[x]root[y]-root[lca(x,y)]-root[fa[lca(x,y)]]) #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; const int maxn1…

圖文詳解YUV420數據格式

YUV格式有兩大類&#xff1a;planar和packed。 對于planar的YUV格式&#xff0c;先連續存儲所有像素點的Y&#xff0c;緊接著存儲所有像素點的U&#xff0c;隨后是所有像素點的V。 對于packed的YUV格式&#xff0c;每個像素點的Y,U,V是連續交*存儲的。 YUV&#xff0c;分為三個…