Nodejs極簡入門教程(一):模組機制,nodejs極簡

來源:互聯網
上載者:User

Nodejs極簡入門教程(一):模組機制,nodejs極簡

JavaScript 規範(ECMAScript)沒有定義一套完善的能適用於大多數程式的標準庫。CommonJS 提供了一套 JavaScript 標準庫規範。Node 實現了 CommonJS 規範。

模組基礎

在 Node 中,模組和檔案是一一對應的。我們定義一個模組:
複製代碼 代碼如下:
// circle.js
var PI = Math.PI;
 
// 匯出函數 area
exports.area = function(r) {
    return PI * r * r;
}
 
// 匯出函數 circumference
exports.circumference = function(r) {
    return 2 * PI * r;
};

這裡將需要匯出的函數加入到 exports 對象。模組的局部變數外部無法訪問(例如,上例中的 PI 變數)。調用 require 載入模組 circle.js:
複製代碼 代碼如下:
var circle = require('./circle.js');
console.log('The area of a circle of radius 4 is '
           + circle.area(4));

附帶提及一下的是,模組中,存在一個 module 對象,表示模組本身,exports 則為 module 的屬性。

模組的載入

Node 會對載入過的模組進行緩衝,避免再次載入的開銷:
複製代碼 代碼如下:
// test.js
console.log("I'm here");

多次載入模組 test.js

複製代碼 代碼如下:
// 僅僅輸出一次 "I'm here"
require('./test');
require('./test');

當負載檔案沒有尾碼時,Node 會嘗試添加尾碼並載入:

1..js(JavaScript 源檔案)
2..node(C/C++ 擴充模組)
3..json(JSON 檔案)

模組主要有幾類:

1.核心模組。核心模組已經被編譯到了 Node 中,我們在其源碼中的 lib 目錄可以找到這些核心模組。常見的核心模組:net、http、fs 模組等

2.檔案模組。檔案模組通過一個相對或者絕對路徑載入,例如我們上面看到的 circle.js

3.自訂模組。自訂模組位於 node_modules 目錄中,我們通過 npm 安裝的各種模組就放置在 node_modules 目錄中

核心模組總是優先被載入,假如有一個自訂模組 http,那麼載入時仍然會載入核心模組 http 而非自訂模組 http。在載入自訂模組時,首先尋找目前的目錄下的 node_modules 目錄,而後尋找父目錄下的 node_modules 目錄,以此類推,直到根目錄。

require 載入的模組不是一個檔案,而是一個目錄時,這樣的目錄被叫做包(package)。包中存在一個名為 package.json 的檔案(包描述檔案),例如:
複製代碼 代碼如下:
{ "name" : "some-library",
  "main" : "./lib/some-library.js" }

其中 main 指出需要被載入的模組。如果包中不存在 package.json 或者 package.json 中未指定 main 模組,那麼 Node 將會嘗試載入 index.js、index.node、index.json。

在載入 JavaScript 模組時,被載入的模組被包裹在一個函數中:
複製代碼 代碼如下:
function(module, exports, __filename, __dirname, ...) {
    JavaScript module
}

每個 JavaScript 模組訪問到的 module、exports、__filename、__dirname 等實際上是通過函數參數傳遞進來的。由於這種包裹,才使得模組的局部變數外部無法訪問。但有時候也會出現讓人難以理解的問題,例如:

test1.js

複製代碼 代碼如下:
exports = {
    name: 'Name5566',
}

test2.js

複製代碼 代碼如下:
module.exports = {
    name: 'Name5566',
}

載入這兩個模組:

複製代碼 代碼如下:
var test1 = require('./test1.js');
console.log(test1.name); // undefined
var test2 = require('./test2.js');
console.log(test2.name); // Name5566

exports 作為參數傳遞給模組,我們通過 exports.x 自然可以給 exports 對象添加屬性(或方法),但直接給 exports 賦值(例如,exports = x)僅僅是改變了形參而非實參的值,因此:

1.為 exports 添加屬性時,使用 exports
2.為 exports 賦值時,使用 module.exports

按 CommonJS 的規範,一個完整的包應該包含有:

1.package.json 包描述檔案
2.bin 二進位檔案目錄
3.lib JavaScript 代碼目錄
4.doc 文檔目錄
5.test 測試代碼目錄

NPM 是一個 Node 的一個包管理工具。常見用法:

查看命令的文檔:

複製代碼 代碼如下:
npm help install

查看命令 install 的文檔。

安裝一個包:
複製代碼 代碼如下:
npm install redis

安裝 redis 這個包。install 命令會將包安裝在目前的目錄下的 node_modules 目錄中。

移除一個包:
複製代碼 代碼如下:
npm remove redis

移除 redis 這個包。remove 命令會將目前的目錄下的包移除掉。


對於一個有js基礎的人來說,nodejs難還是php難?

親,你的js也僅僅是基礎,nodejs是後端架構,兩者之間是有點區別的。
如果你對js興趣比較大的話,可以看看nodejs,否則就學學php,學好一門,換另外的語言相信你上手會很快,重要,要精通一門才行
 
開發一個網站用php還是nodejs?

我不覺得node.js有什麼不適合新手的,畢竟你從0開始學PHP一樣要對網頁編程有個學習的過程,所以從上手程度來說兩者幾乎等價。一樣要瞭解MVC,資料庫連接等等。
直接比較一下上手時的優劣,你可以自己衡量一下
Node.js
優點:js文法,對會用js的人來說看懂代碼不難。

簡化了設定管理員的過程,內建一個web伺服器,不像php要安裝配置apache
缺點:相比PHP學習資料較少
PHP
優點:學習資料多,架構多,工具包多
缺點:對於文法有個熟悉過程
我覺得這應該是你搭的第一個網站,語言的重要性其實不那麼大,優缺點可能在你學習的過程中也不會體現,而且都是一些外在外因。當然你也可以這麼考慮,現在搞PHP的一抓一大把,而且主要以輕量級公司用的居多。node被很多大公司所推崇,越早接觸機會機會越多。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.