本篇文章給大家詳細了解一下Nodejs中的模組規格。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
模組規範是建立一個大型 Node.js 應用的基礎,所以非常重要;Node.js 模組規範也就是 CommonJS 模組規範,下面來簡單了解一下吧。 【推薦學習:《nodejs 教學》】
先前載入JS 檔案的唯一方式是透過 標籤引入,這會有什麼問題呢?
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 使用遇到问题可以登录 官网 寻找解决办法:
require()
加载模块,默认返回一个对象,可以通过设置 exports
或 module.exports
设置模块返回的数据。更多编程相关知识,请访问:编程视频!!
以上是淺談Nodejs中的模組規範的詳細內容。更多資訊請關注PHP中文網其他相關文章!