Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。
Node.js 使用了一個(gè)事件驅(qū)動、非阻塞式 I/O 的模型,使其輕量又高效。
本文主要對一些NodeJS的基本概念做一個(gè)介紹。
模塊的引入方式
在NodeJS中,可以通過require命令,引入需要的模塊,主要有以下三種方式:
- 引入NodeJS提供的內(nèi)置模塊,譬如:
http,fs
var fs = require('fs');
- 引入第三包,譬如
http-server(前提本地已安裝了該模塊)
var httpServer = require('http-server')
- 引入自己封裝的模塊,譬如
API.js,需要特別注意的是:需要加./相對路徑,這區(qū)別于上面兩種方式。
// ① API.js
function test() {
console.log('歡迎引入該模塊');
}
module.exports.say = test; // 對外暴露test方法
// ② main.js
const API = require('./API.js');
API.say();
// ③ 執(zhí)行命令 node main.js
Require模塊的查找路徑
這里主要是針對第三方依賴。在當(dāng)前文件中引入第三方依賴時(shí),它優(yōu)先從當(dāng)前目錄的node_modules中查找是否有該模塊,若沒有,往上一個(gè)目錄查找,直至根目錄。舉例如下,有如下目錄:
? node pwd
/Users/xushufeng/Desktop/node
? node ls -al
total 24
drwxr-xr-x 6 xushufeng staff 192 8 20 17:34 .
drwx------+ 14 xushufeng staff 448 8 20 14:42 ..
-rw-r--r-- 1 xushufeng staff 70 8 20 14:46 api.js
-rw-r--r-- 1 xushufeng staff 41 8 20 17:23 index.js
drwxr-xr-x 52 xushufeng staff 1664 8 20 17:34 node_modules
-rw-r--r-- 1 xushufeng staff 329 8 20 17:36 package.json
先從node目錄下的node_modules查找,若有則直接使用;若沒有,則往上去Desktop目錄下的node_modules繼續(xù)查找,直至根目錄。
需要特別注意的是,模塊路徑的查找與全局安裝的模塊沒有任何關(guān)系,
因?yàn)槿职惭b的路徑為:/usr/local/lib/node_modules/,找不到這里。
NPM包管理
Node.js 的包管理器 npm,是全球最大的開源庫生態(tài)系統(tǒng)。
通過NodeJs提供的包管理工具,可以很方便的使用第三方依賴。常用的npm命令有:
-
npm install -g <pkg>: 全局安裝,MAC系統(tǒng)下,安裝路徑為/usr/local/lib/node_modules/,可以在任何地方使用。 -
npm install --save|--save-dev <pkg>: 將依賴安裝于當(dāng)前目錄中,package.json文件中的dependencies | devDependencies字段會添加一條該依賴的版本信息 -
npm install: 安裝package.json文件中,dependencies和devDependencies中所有的依賴
另外,如果全局沒有安裝,又想使用項(xiàng)目中安裝的依賴命令時(shí)(譬如http-server), 可以使用如下方式:
./node_modules/http-server/bin/http-server
NPM Script
現(xiàn)如今,前端工程化越來越成為一種趨勢,在GitHub上面的很多項(xiàng)目中,經(jīng)??梢钥吹揭粋€(gè)package.json文件, 舉例如下:
{
"name": "node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"http-server": "^0.11.1"
},
"devDependencies": {
"http-server": "^0.11.1"
}
}
雖然第三方提供了很多方便的命令行供我們使用,但是每次都要輸那么一長串命令,時(shí)間長了根本就記不住,這個(gè)時(shí)候,我們就可以往scripts字段中,配置我們需要的命令。例如:
{
"scripts": {
"css:autoprefixer": "postcss -u autoprefixer -r dist/css/*",
"css:compress": "csso in.css --output out.css",
"js:lint": "eslint src/js",
"js:uglify": "mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js",
"image:imagemin": "app=imagemin-cli npm run check; imagemin src/images dist/images -p",
"server": "browser-sync start --server --files 'dist/css/*.css, dist/js/*.js'",
"watch": "onchange 'src/js/*.js' -- npm run css:compress",
"start": "npm run server"
}
}
npm run css:autoprefixer
npm start
常用的第三方包
-
nrm: 快速切換npm源
npm install -g nrm
nrm ls
nrm use taobao
nrm use npm
-
n: 方便切換NodeJS版本