require 書寫約定

2018-11-06 18:25 更新

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

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

1. 正確拼寫

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

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

2. 不要修改

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

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

3. 使用直接量

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

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

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

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

有時(shí)會(huì)希望可以使用 require 來進(jìn)行條件加載:

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

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

Why?

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

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

因?yàn)楹?jiǎn)單,所以可靠!

參考文檔


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)