require 書寫約定

2018-11-06 18:25 更新

使用 Sea.js 書寫模塊代碼時,需要遵循一些簡單規(guī)則。

只是書寫和調(diào)試時的規(guī)范?。。?gòu)建后的代碼完全不需要遵循下面的約定?。。。。?!

1. 正確拼寫

模塊 factory 構(gòu)造方法的第一個參數(shù) 必須 命名為 require 。

// 錯誤!define(function(req) {  // ...});// 正確!define(function(require) {  // ...});

2. 不要修改

不要重命名 require 函數(shù),或在任何作用域中給 require 重新賦值。

// 錯誤 - 重命名 "require"!var req = require, mod = req("./mod");// 錯誤 - 重定義 "require"!require = function() {};// 錯誤 - 重定義 "require" 為函數(shù)參數(shù)!function F(require) {}// 錯誤 - 在內(nèi)嵌作用域內(nèi)重定義了 "require"!function F() {  var require = function() {};
}

3. 使用直接量

require 的參數(shù)值 必須 是字符串直接量。

// 錯誤!require(myModule);// 錯誤!require("my-" + "module");// 錯誤!require("MY-MODULE".toLowerCase());// 正確!require("my-module");

在書寫模塊代碼時,必須遵循這些規(guī)則。其實只要把 require 看做是語法關(guān)鍵字 就好啦。

關(guān)于動態(tài)依賴

有時會希望可以使用 require 來進行條件加載:

if (todayIsWeekend)  require("play");else
  require("work");

但請牢記,從靜態(tài)分析的角度來看,這個模塊同時依賴 play 和 work 兩個模塊,加載器會把這兩個模塊文件都下載下來。 這種情況下,推薦使用 require.async 來進行條件加載。

Why?

這些約定初看起來會有些小不爽,其實也的確可以通過每次都編譯的方式來去掉這些限制。但編譯的方式,會給開發(fā)調(diào)試帶來麻煩,代碼的實現(xiàn)復雜度也會增加。Sea.js 的核心設(shè)計原則是保持簡單,遵循 New Jersey Approach

簡單性:設(shè)計必須簡單,這既是對實現(xiàn)的要求,也是對接口的要求。實現(xiàn)的簡單要比接口的簡單更加重要。簡單是設(shè)計中需要第一重視的因素。

因為簡單,所以可靠!

參考文檔


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號