Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境抗斤。
Node.js 使用了一個事件驅(qū)動即寒、非阻塞式 I/O 的模型,使其輕量又高效锡宋。
本文主要對一些NodeJS的基本概念做一個介紹描焰。
模塊的引入方式
在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)前文件中引入第三方依賴時坪圾,它優(yōu)先從當(dāng)前目錄的node_modules
中查找是否有該模塊,若沒有惑朦,往上一個目錄查找兽泄,直至根目錄。舉例如下漾月,有如下目錄:
? 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)系
,
因為全局安裝的路徑為:/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
中所有的依賴
另外性置,如果全局沒有安裝檐晕,又想使用項目中安裝的依賴命令時(譬如http-server
), 可以使用如下方式:
./node_modules/http-server/bin/http-server
NPM Script
現(xiàn)如今,前端工程化越來越成為一種趨勢蚌讼,在GitHub上面的很多項目中,經(jīng)掣鲩牛可以看到一個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"
}
}
雖然第三方提供了很多方便的命令行供我們使用篡石,但是每次都要輸那么一長串命令,時間長了根本就記不住西采,這個時候凰萨,我們就可以往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版本