91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nodejs中模塊規范的示例分析

發布時間:2021-06-09 11:05:11 來源:億速云 閱讀:254 作者:小新 欄目:web開發

這篇文章主要為大家展示了“Nodejs中模塊規范的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Nodejs中模塊規范的示例分析”這篇文章吧。

CommonJS 模塊規范

以前加載 JS 文件的唯一方式是通過 <script> 標簽引入,這個會有什么問題呢?

  • 腳本變多時,需要手動管理加載的順序;腳本越多就越難管理。

  • 不同腳本之間的邏輯調用,需要通過全局變量的方式。

  • 沒有 html 的時候怎么引用 JS 文件呢?這個例子就是 Node.js。

于是 Node.js 就有了 CommonJS 模塊規范,而 Webpack 也是兼容了 CommonJS 的寫法,讓我們可以用 CommonJS 規范來寫前端代碼。

CommonJS 模塊規范是 JavaScript 社區發起的,它在 Node.js 上得到應用并推廣,后續也影響到了瀏覽器端 JavaScript。

require

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

Nodejs中模塊規范的示例分析

它也是可以通過 exports 來掛載一些屬性的:字符串、函數、對象等類型的數據。

lib.js 添加一些代碼

console.log('this is lib')

exports.hello = "world"
exports.add = function (a, b) {
  return a + b;
}
exports.obj = { hello: "Node" }

Nodejs中模塊規范的示例分析

看來在 CommonJS 模塊規范下,它是默認有一個 exports 這樣的空對象的。

那既然 require 返回這樣一個對象,那么修改和添加其中的屬性會怎么樣呢?

// index.js
// 既然 require 返回一個對象,那么修改和添加屬性會怎么樣呢?
lib.hello = 'node';
lib.update = '1234';
// lib.js
setTimeout(function() {
  console.log(exports)
}, 500)

Nodejs中模塊規范的示例分析

可以看到,在 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;
}

Nodejs中模塊規范的示例分析

可以看到:lib 返回輸出的 minus 函數。

require 一個模塊時,module.exports 的優先級要高于 exports,如果指定了 module.exports,那么就會使用 module.exports 指定的對象,如果沒有指定 module.exports,就會使用 exports 對象。

npm

npm 相信大家都不陌生,那這里就只是簡單介紹一下吧。

npm 是 Node.js 的包管理工具,安裝 Node.js 的時候都會自帶有 npm 的。而包則是別人寫的 Node.js 模塊,我們平時開發都會經常用到一些別人開發出來放到 Node.js 服務器上面的包。

npm 初始化:npm init,初始化的時候一直回車就好,之后會生成一個 package.json 文件;或者執行命令 npm init -y,這樣就是生成一個默認的 package.json 文件,里面的屬性和執行 npm init 一直回車是一樣的。

Nodejs中模塊規范的示例分析

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>;如果想要全局安裝則添加 -gnpm install <packageName> -g。如安裝 glob 包:npm install glob

  • 卸載依賴包的命令是 npm uninstall <packageName>

比如安裝 express 包,安裝成功會生成一個 node-modules 文件夾,我們下載的包就放在這個文件里面:

Nodejs中模塊規范的示例分析

如果使用 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 使用遇到問題可以登錄 官網 尋找解決辦法:

Nodejs中模塊規范的示例分析

總結

  • Node.js 的模塊規范就是 CommonJS 模塊規范。

  • CommonJS 模塊規范通過 require() 加載模塊,默認返回一個對象,可以通過設置 exportsmodule.exports 設置模塊返回的數據。

  • Node.js 的包管理工具是 npm,可通過使用鏡像 cnpm 來提高下載速度。

以上是“Nodejs中模塊規范的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达拉特旗| 永新县| 长海县| 遂宁市| 仪陇县| 平武县| 平顶山市| 静安区| 阿勒泰市| 玉林市| 会宁县| 大邑县| 桦川县| 大悟县| 秦皇岛市| 龙川县| 阿坝县| 商都县| 南陵县| 长武县| 西乌| 镇原县| 罗城| 米泉市| 拜城县| 且末县| 景洪市| 阳春市| 应城市| 五大连池市| 洞头县| 盱眙县| 甘德县| 嘉祥县| 九台市| 青神县| 宁城县| 青川县| 台南县| 民县| 普兰县|