現在,Require.js是我最喜歡的Javascript程式設計方式。它可以使程式碼化整為零,並且易於管理。而Require.js Optimizer能幫助我們將一個較大的應用分散成多個較小的應用,並且透過依賴串聯起來,最後在編譯打包時合併起來。這些原因促使我們使用require.js。
那麼,讓我們來看看require.js有什麼屌的特性吧!
相容於CommonJS
AMD (非同步模組定義規格) 出現自CommonJS工作群組。 CommonJS旨在創造Javascript的生態系統。 CommonJS的一個重要部分是transport/c, 即AMD的前身,而require.js則是該規範的實作。
CommonJS模組和AMD模組的語法差異,主要由於AMD需要支援瀏覽器的非同步特性。而CommonJS模組則需要同步進行,例如:
var someModule = require( "someModule" );
var anotherModule = require( "anotherModule" );
exports.asplode = function() {
someModule.doTehAwesome();
anotherModule.doMoarAwesome();
};
AMD模組是非同步載入模組的,故而模組定義需要一個陣列作為第一個參數,而模組載入完畢後回呼的函數作為第二個參數傳入。
define( [ "someModule"], function( someModule ) {
return {
asplode: function() {
someModule.doTehAwesome();
// 這將會非同步執行
require( [ "anotherModule" ], function( anotherModule ) {
anotherModule.doMoarAwesome();
});
}
};
});
然而,在require.js中AMD也能相容於CommonJS語法。透過AMD的define函數包裝CommonJS模組,你也可以再AMD中擁有一個CommonJS模組,例如:
define(function( require, exports, module )
var someModule = require( "someModule" );
var anotherModule = require( "anotherModule" );
someModule.doTehAwesome();
anotherModule.doMoarAwesome();
exports.asplode = function() {
someModule.doTehAwesome();
anotherModule.doMoarAwesome();
};
});
實際上,require.js透過函數.toString解釋回呼函數的模組內容,找到其正確的依賴,將其變成一個通常的AMD模組。需要注意,如果你使用這種方式編寫模組,可能會發生與其他AMD載入器不相容的情況,因為這違反了AMD規範,但它能很好的理解這種格式的寫法。
這裡發生了什麼,require.js實際上做了function.toString的回呼函數解析模組的內容,找到正確的依賴,就像它,如果它是一個正常的AMD模組。重要的是要注意,如果您選擇這樣寫模組,他們將最有可能不相容於與其他AMD模組裝載機,因為這違反了AMD規範,但它是很好的了解這個格式存在!
CDN回退
另一個隱藏的require.js瑰寶是,其支援當CDN載入不正確時,回退載入本機對應的函式庫。我們可以透過require.config達到這個目的:
requirejs.config({
paths: {
jquery: [
'//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js',
'lib/jquery'
]
}
});
沒有依賴?對象字面量?沒問題!
當你寫一個沒有任何依賴的模組,並且只是傳回一個物件包含一些功能函數,那麼我們可以使用一個簡單的語法:
define({
forceChoke: function() {
},
forceLighting: function() {
},
forceRun: function() {
}
});
很簡單,也很有用,如果該模組只是功能的集合,或者只是一個資料包。
循環依賴
在某些情況中,我們可能需要模組moduleA和moduleA中的函數需要依賴一些應用。這就是循環依賴。
// js/app/moduleA.js
define( [ "require", "app/app"],
function( require, app ) {
return {
foo: function( title ) {
var app = require( "app/app" );
return app.something();
}
}
}
);
得到模組的位址
如果你需要得到模組的位址,你可以這麼做…
var path = require.toUrl("./style.css");
BaseUrl
通常,在進行的單元測試時,你的原始程式碼可能會放在類似src的資料夾裡,同時,可能你的測試放在類似tests的資料夾裡。這可能比較難讓測試配置正確。
例如我們在tests資料夾有一個index.html文件,需要本地載入tests/spec/*.js。並假設,所有原始程式碼在為src/js/*.js,並有一個main.js在該資料夾。
index.html中,不在載入require.js時設定data-main。
<script><br /> require( [ "../src/js/main.js" ], function() {<br /> require.config({<br /> baseUrl: "../src/js/"<br /> });<br /> <br /> require([ <br /> "./spec/test.spec.js",<br /> "./spec/moar.spec.js"<br /> ], function() {<br /> // start your test framework<br /> });<br /> });<br /> </script>
你可以發現main.js被載入。然而由於沒有設定data-main,因此所欲我們需要製定一個baseUrl。而當使用data-main時,baseUrl會根據其設定的檔案來自動設定。
在這裡,你可以看到main.js被載入。然而,由於它沒有載入資料主要腳本標記,那麼您必須指定一個base即可。當資料主要用於baseURL時從主文件中的位置推斷。透過自訂baseUrl我們可以輕鬆地將測試程式碼和應用程式碼分開存放。
JSONP
我們可以這樣處理JSONP終端:
require( [
"http://someapi.com/foo?callback=define"
], function (data) {
console.log(data);
});
對於非AMD庫,使用shim來解決
在許多請款下,我們需要使用非AMD函式庫。例如Backbone和Underscore並未適應AMD規範。而jQuery其實只是將自己定義成一個名為jQuery全域變量,所以對於jQuery什麼都不用做。
幸運的是,我們可以使用shim配置來解決這個問題。
require.config({
paths: {
"backbone": "vendor/backbone",
"underscore": "vendor/underscore"
},
shim: {
"backbone": {
deps: [ "underscore" ],
exports: "Backbone"
},
"underscore": {
exports: "_"
}
}
});

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),