Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.html
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。
Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。
Node.js 的包管理器 npm,是全球最大的開源庫生態系統。node
英文網址:https://nodejs.org/en/
中文網址:http://nodejs.cn/python
版本選擇:【官方目前有兩種版本,一種是長期穩定版,另外一種是開發版,推薦使用長期穩定版】linux
Long Term Support:長時間支持版本【簡寫LTS】npm
操做步驟:json
依賴python2.7centos
(一) 編譯好的文件api
#下載 wget https://nodejs.org/dist/v8.5.0/node-v8.5.0-linux-x64.tar.xz #解壓該文件 tar -xvf node-v8.5.0-linux-x64.tar.xz #存放路徑 mv node-v8.5.0-linux-x64 /app/ ln -s node-v8.5.0-linux-x64 node #修改/etc/profile,添加環境變量 #SET PATH FOR NODEJS export NODE_HOME=/app/node export PATH=$NODE_HOME/bin:$PATH #使環境變量生效 source /etc/profile #運行node -v顯示nodejs的版本號則安裝配置成功 node -v
(二)經過源碼編譯bash
tar -zxvf node-v8.5.0.tar.gz cd node-v8.5.0 ./configure make make install cp /usr/local/bin/node /usr/sbin/ 查看當前安裝的Node的版本 node -v v8.5.0
#安裝pm2,pm2是node進程管理器 npm install -g pm2 #卸載pm2,須要刪除家目錄隱藏的目錄.pm2 npm uninstall -g pm2 mv /root/.pm2 /tmp
測試app
#1. 添加測試文件helloworld.js var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); #2. pm2啓動: pm2 start helloworld.js --name 'helloworld' [root@120 www]# pm2 start helloworld.js --name 'helloworld' [PM2] Starting /app/www/helloworld.js in fork_mode (1 instance) [PM2] Done. ┌────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ ├────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤ │ helloworld │ 0 │ fork │ 25376 │ online │ 0 │ 0s │ 28% │ 20.3 MB │ root │ disabled │ └────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app #3. 把pm2加入開機啓動 pm2 startup centos [root@120 www]# pm2 startup centos [PM2] Init System found: systemd ----------------------------------------------------------- PM2 detected systemd but you precised centos Please verify that your choice is indeed your init system If you arent sure, just run : pm2 startup ----------------------------------------------------------- Platform centos Template [Unit] Description=PM2 process manager Documentation=https://pm2.keymetrics.io/ After=network.target [Service] Type=forking User=root LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Environment=PATH=/app/node-v8.5.0-linux-x64/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin Environment=PM2_HOME=/root/.pm2 PIDFile=/root/.pm2/pm2.pid ExecStart=/app/node-v8.5.0-linux-x64/lib/node_modules/pm2/bin/pm2 resurrect ExecReload=/app/node-v8.5.0-linux-x64/lib/node_modules/pm2/bin/pm2 reload all ExecStop=/app/node-v8.5.0-linux-x64/lib/node_modules/pm2/bin/pm2 kill [Install] WantedBy=multi-user.target Target path /etc/systemd/system/pm2-root.service Command list [ 'chmod +x /etc/systemd/system/pm2-root.service', 'systemctl enable pm2-root', 'systemctl start pm2-root', 'systemctl daemon-reload', 'systemctl status pm2-root' ] [PM2] Writing init configuration in /etc/systemd/system/pm2-root.service [PM2] Making script booting at startup... >>> Executing chmod +x /etc/systemd/system/pm2-root.service [DONE] >>> Executing systemctl enable pm2-root Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /etc/systemd/system/pm2-root.service. [DONE] >>> Executing systemctl start pm2-root [DONE] >>> Executing systemctl daemon-reload [DONE] >>> Executing systemctl status pm2-root ● pm2-root.service - PM2 process manager Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: disabled) Active: active (running) since 一 2017-12-11 11:49:13 CST; 142ms ago Docs: https://pm2.keymetrics.io/ Main PID: 25245 (PM2 v2.8.0: God) CGroup: /system.slice/pm2-root.service ‣ 25245 PM2 v2.8.0: God Daemon (/root/.pm2) 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: [PM2] Restoring processes located in /root/.pm2/dump.pm2 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: [PM2][ERROR] No processes saved; DUMP file doesn't exist 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: ┌────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐ 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: ├────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤ 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: │ helloworld │ 0 │ fork │ 25376 │ online │ 0 │ 3m │ 0% │ 21.6 MB │ root │ disabled │ 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: └────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘ 12月 11 11:49:13 120.234.2.74_centos7 pm2[25587]: Use `pm2 show <id|name>` to get more details about an app 12月 11 11:49:13 120.234.2.74_centos7 systemd[1]: Started PM2 process manager. [DONE] +---------------------------------------+ [PM2] Freeze a process list on reboot via: $ pm2 save [PM2] Remove init script via: $ pm2 unstartup centos #4. 保存更改 [root@120 www]# pm2 save
PM2經常使用命令
# 啓動命令,推薦使用pm2 run npm 方式啓動 # 參考連接:https://newsn.net/say/node-pm2-start.html $ pm2 run npm -start --name invoice # invoice別名 $ pm2 start app.js # 啓動app.js應用程序 # 4個應用程序會自動進行負載均衡 $ pm2 start app.js -i 4 # cluster mode 模式啓動4個app.js的應用實例 $ pm2 start app.js --name="api" # 啓動應用程序並命名爲 "api" $ pm2 start app.js --watch # 當文件變化時自動重啓應用 $ pm2 start script.sh # 啓動 bash 腳本 $ pm2 list # 列表 PM2 啓動的全部的應用程序 $ pm2 monit # 顯示每一個應用程序的CPU 和內存佔用狀況 $ pm2 show [app-name] # 顯示應用程序的全部信息 $ pm2 logs # 顯示全部應用程序的日誌 $ pm2 logs [app-name] # 顯示指定應用程序的日誌 $ pm2 flush $ pm2 stop all # 中止全部的應用程序 $ pm2 stop 0 # 中止 id爲 0的指定應用程序 $ pm2 restart all # 重啓全部應用 $ pm2 reload all # 重啓 cluster mode下的全部應用 $ pm2 gracefulReload all # Graceful reload all apps in cluster mode $ pm2 delete all # 關閉並刪除全部應用 $ pm2 delete 0 # 刪除指定應用 id 0 $ pm2 scale api 10 # 把名字叫api的應用擴展到10個實例 $ pm2 reset [app-name] # 重置重啓數量 $ pm2 startup # 建立開機自啓動命令 $ pm2 save # 保存當前應用列表 $ pm2 resurrect # 從新加載保存的應用列表 $ pm2 update # Save processes, kill PM2 and restore processes $ pm2 generate # Generate a sample json configuration file
yarn和npm對比:
1、yarn.lock 文件 在 npm 中一樣可使用 npm shrinkwrap 命令來生成一個鎖文件,這樣在使用 npm install 時會在讀取 package.json 前先讀取這個文件,就像 Yarn 會先讀取yarn.lock 同樣。這裏的區別是 Yarn 總會自動更新 yarn.lock,而 npm 須要你從新操做。 2、並行安裝 每當 npm 或 Yarn 須要安裝一個包時,它會進行一系列的任務。在 npm 中這些任務是按包的順序一個個執行,這意味着必須等待上一個包被完整安裝纔會進入下一個;Yarn 則並行的執行這些任務,提升了性能。 3、清晰的輸出 npm 默認狀況下很是冗餘,例如使用 npm install 時它會遞歸列出全部安裝的信息;而 Yarn 則一點也不冗餘,當可使用其它命令時,它適當的使用 emojis 表情來減小信息(Windows 除外)
正式使用:
1、安裝yarn 打開命令行輸入並執行下面指令安裝yarn包管理工具 npm i yarn -g --verbose 2、更換源地址 npm官方源雖然在國內沒有被牆,但訪問速度仍然不敢恭維,所以次建議使用以前切換爲淘寶鏡像,在yarn安裝完畢以後執行以下指令: yarn config set registry https://registry.npm.taobao.org 到此爲止咱們就能夠在項目中像使用npm同樣使用yarn了。
經常使用指令:
yarn / yarn install 等同於npm install 批量安裝依賴 yarn add xxx 等同於 npm install xxx —save 安裝指定包到指定位置 yarn remove xxx 等同於 npm uninstall xxx —save 卸載指定包 yarn add xxx —dev 等同於 npm install xxx —save-dev yarn upgrade 等同於 npm update 升級所有包 yarn global add xxx 等同於 npm install xxx -g 全局安裝指定包
總結:
在批量安裝包文件時,yarn的安裝速度遠勝於npm,可是相對於老牌npm,yarn目前仍然不是很穩定,偶爾會致使包安裝出現問題,你們能夠根據我的狀況來決定是否使用。
# 安裝依賴庫 cd 項目目錄 npm i # 構建 npm run build # 啓動nodejs程序 cd 項目目錄 pm2 start dist/index.js 啓動命令,若是研發添加了server命令: npm run server # 刪除pm2任務 pm2 delete ID號 # 刪除所有任務 pm2 delete all # 重啓pm2任務 pm2 restart ID號 # 查看啓動日誌 pm2 logs
yarn經常使用命令
# 安裝依賴 yarn