您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Nodejs中模塊規范的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Nodejs中模塊規范的示例分析”這篇文章吧。
以前加載 JS 文件的唯一方式是通過 <script>
標簽引入,這個會有什么問題呢?
腳本變多時,需要手動管理加載的順序;腳本越多就越難管理。
不同腳本之間的邏輯調用,需要通過全局變量的方式。
沒有 html
的時候怎么引用 JS 文件呢?這個例子就是 Node.js。
于是 Node.js 就有了 CommonJS 模塊規范,而 Webpack 也是兼容了 CommonJS 的寫法,讓我們可以用 CommonJS 規范來寫前端代碼。
CommonJS 模塊規范是 JavaScript 社區發起的,它在 Node.js 上得到應用并推廣,后續也影響到了瀏覽器端 JavaScript。
require
是 CommonJS 模塊規范的 API,用來引入要使用的文件。比如引入 lib.js
:
require('./lib');
require
默認返回一個空對象;新建兩個文件,文件內容如下:
// lib.js console.log('this is lib'); // index.js console.log('start require') var lib = require('./lib'); // 默認返回一個空對象 console.log('end require', lib);
來運行看看:node index.js
它也是可以通過 exports
來掛載一些屬性的:字符串、函數、對象等類型的數據。
在 lib.js
添加一些代碼
console.log('this is lib') exports.hello = "world" exports.add = function (a, b) { return a + b; } exports.obj = { hello: "Node" }
看來在 CommonJS 模塊規范下,它是默認有一個 exports
這樣的空對象的。
那既然 require
返回這樣一個對象,那么修改和添加其中的屬性會怎么樣呢?
// index.js // 既然 require 返回一個對象,那么修改和添加屬性會怎么樣呢? lib.hello = 'node'; lib.update = '1234';
// lib.js setTimeout(function() { console.log(exports) }, 500)
可以看到,在 lib.js
加了一個 500ms
之后打印的內容是改變了的。所以通過 exports
輸出的時候要注意這個拷貝的問題。可能有些同學會看到過這樣的一段話:CommonJS 模塊輸出的是一個值的淺拷貝,ES6 模塊輸出的是值的引用。那么這是怎么回事呢?
原來 require
還可以通過 module.exports
的方式返回數據,而且數據類型是不限的,例如返回一個函數:
// lib.js console.log('this is lib') exports.hello = "world" exports.add = function (a, b) { return a + b; } exports.obj = { hello: "Node" } // setTimeout(function() { // console.log(exports) // }, 500) module.exports = function minus(a, b) { return a - b; }
可以看到:lib
返回輸出的 minus
函數。
即在 require
一個模塊時,module.exports
的優先級要高于 exports
,如果指定了 module.exports
,那么就會使用 module.exports
指定的對象,如果沒有指定 module.exports
,就會使用 exports
對象。
npm
相信大家都不陌生,那這里就只是簡單介紹一下吧。
npm
是 Node.js 的包管理工具,安裝 Node.js 的時候都會自帶有 npm
的。而包則是別人寫的 Node.js 模塊,我們平時開發都會經常用到一些別人開發出來放到 Node.js 服務器上面的包。
npm
初始化:npm init
,初始化的時候一直回車就好,之后會生成一個 package.json
文件;或者執行命令 npm init -y
,這樣就是生成一個默認的 package.json
文件,里面的屬性和執行 npm init
一直回車是一樣的。
package.json
文件內容如下:
{ "name": "node", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
下載安裝依賴包 <packageName>
:npm install <packageName>
;如果想要全局安裝則添加 -g
:npm install <packageName> -g
。如安裝 glob
包:npm install glob
卸載依賴包的命令是 npm uninstall <packageName>
。
比如安裝 express
包,安裝成功會生成一個 node-modules
文件夾,我們下載的包就放在這個文件里面:
如果使用 npm
安裝依賴包的速度很慢,可以使用淘寶鏡像 cnpm
來安裝,鏡像是指它把國外 npm
的包做一層復制然后映射到國內的服務器上面,這樣不用山長水遠去國外拉包,速度會快很多。
安裝 cnpm
:
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm
的使用和 npm
類似:cnpm install <packageName>
。
那如果你覺得 cnpm
不夠正宗,不想長期使用,但有些包下載又確實慢了,可以臨時使用鏡像,比如安裝 express
:
npm install express --registry=https://registry.npm.taobao.org
--registry=
是指定下載地址的意思,例如一些公司可能有自己的依賴包服務器,那么可以通過將這個地址指向公司的服務器地址來更快的下載依賴包。
而 cnpm
本身其實是 npm
的一個別名,使用 cnpm
的時候會自動幫我們加上后面的參數 --registry=https://registry.npm.taobao.org
,然后通過鏡像地址來下載依賴包。
另外,npm 使用遇到問題可以登錄 官網 尋找解決辦法:
Node.js 的模塊規范就是 CommonJS 模塊規范。
CommonJS 模塊規范通過 require()
加載模塊,默認返回一個對象,可以通過設置 exports
或 module.exports
設置模塊返回的數據。
Node.js 的包管理工具是 npm,可通過使用鏡像 cnpm 來提高下載速度。
以上是“Nodejs中模塊規范的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。