新建node工程

以前各類node工程都是東抄抄,西抄抄的.  用ng的cli以後,發現很是舒服.因此把node新建工程的種種記錄一下.node

node+babel, 直接按es6標準寫就行了,  不須要必定寫ts再轉碼了(寫angular再用ts), 其餘狀況下用其餘語言寫而後轉碼成js的方案, ClosjureScript 效率更高吧).git

參考https://www.robinwieruch.de/minimal-node-js-babel-setup/es6

https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43eigithub

1 準備空代碼倉庫

在遠程倉庫(github或者bitbucket)起個空工程 而後複製 "git clone git@XXX/YYY.git"命令 在本地根目錄好比~/dev 起控制檯, 運行,獲得空文件夾express

    此時應該包括,但不限於這麼幾個文件:npm

     README.md json

     .gitingore  (node版 https://github.com/github/gitignore/blob/master/Node.gitignore)ubuntu

    若是沒有,本身新建,或者從別的工程copy過來babel

2 建立node工程

在控制檯(code下 ctrl + `) app

cd 工程路徑 npm init -y

 

npm i --save express

此時出現:

package.json

package-lock.json

文件夾node_modules 

babel

開發時直接寫es6標準的代碼

npm i --save-dev @babel/core @babel/node @babel/preset-env @babel/register

建立.babelrc文件

{ "presets": ["@babel/preset-env"] }

修改package.json

{ "name": "wg-db-json", "version": "1.0.0", "description": "", "main": "src/app.js", "scripts": { "start": "babel-node src/app.js --config=./cfg.yml",
"test": "echo \"Error: no test specified\" && exit 1" }, ... }

建立src/app.js 

import express from "express"; const app = express(); const port = 3000; app.get("/", (req, res) => res.send("Hello World!")); process.on('uncaughtException', function (e) { console.log(e); }); app.listen(port, () => console.log(`Example app listening on port ${port}!`));

注意使用了import  from 語句

手工建立cfg.yml  (本身的app可能用到的配置文件,已經習慣用yml寫,能夠加註釋,省去引號 也比json短小) 

nodemon

爲了開發時邊修改邊自動從新運行 注意版本號, 以後的版本在我目前的mint19.1/ubuntu18.04上,以後的版本中止任務時, node進程殺不死 重啓會報錯,包括文件編輯

參考https://github.com/remy/nodemon/issues/1508

如今也只能支持在命令行裏npm run dev 不支持 vscode裏 用按鈕啓動/關閉任務,  可是在vode裏點"+"手動建立一個新終端 手動運行npm run dev 實在搞不定,先這樣了

npm i --save-dev nodemon@1.18.7

手工建立一個nodemon.json

{ "ignore": ["**/*.test.js", ".git", "node_modules"], "watch": ["src"], "exec": "npm start", "ext": "js" }

修改package.json

{ "name": "wg-db-json", "version": "1.0.0", "description": "", "main": "src/app.js", "scripts": { "start": "babel-node src/app.js -- --config=./cfg.yml",
"dev": "nodemon",
"test": "echo \"Error: no test specified\" && exit 1"
 }, }

 

這樣開發時, 運行npm dev     經過nodemon  調用 npm start 

部署時直接運行npm start便可.

test

npm i --save-dev mocha chai

修改package.json

{ "name": "wg-db-json", "version": "1.0.0", "description": "", "main": "src/app.js", "scripts": { "start": "babel-node src/app.js-- --config=./cfg.yml",
"dev": "nodemon",
"test": "mocha -r @babel/register"
 }, ... }

建立test文件夾,隨便建立一個test1.js

import { expect } from 'chai'; import 'mocha'; describe('test1', () => { it('should be', () => { expect('a').to.equal('a'); }); })

 

解析yml配置文件

1安裝庫,運行時用的,沒有--save-dev選項

npm i js-yaml yargs --save

 

cfg.yml 隨便寫點內容

PATH_DB: ~/dev/db_test

修改app.js

import express from "express"; import fs from "fs"; //--------讀yaml配置文件------------
const yaml = require('js-yaml'); const argv = require('yargs').argv; console.log('argv', argv); const config = yaml.safeLoad(fs.readFileSync(argv.config, { encoding: 'utf8', flag: "r" })); console.log('yaml config', config); //  const app = express(); const port = 3000; app.get("/", (req, res) => res.send("Hello World!")); process.on('uncaughtException', function (e) { console.log(e); }); app.listen(port, () => console.log(`Example app listening on port ${port}!`));

由於這倆庫仍是node風格的,因此仍是用require導入

 

雜: 沒關閉的node進程致使端口占用

偶爾code下關閉任務,可是node進程並無殺死的狀況.

這時沒法啓動新的任務.須要手動殺死殭屍進程

lsof -i  :端口號

看到確實是node佔用了

關閉所有node進程

killall node

這時在啓動,就OK了

 

PS:

不常從0建立純node工程, 因此記錄一下過程. 

1 理解cli的意義了: 沒有cli狀況下,本身手動配置各類項,確實不如angular提供了cli方便

2 定製自由度確實比較靈活. 可是也致使了雪花式配置文件, 其實也就babel和nodemon 而後本身程序用的yml 可是各類碎片文件已經很多了.

3 各類配置內容沒有寫在一塊兒, 而是每一個都保持三部曲:

   1安裝庫

   2修改package.json

   3增長配置文件

 4 遇到第三方庫的版本問題對新手很是不友好. 特別是由於版本的緣由致使的中止nodemon時不能正常殺死node進程, 搞了好久 效果和各類google到的都不同. 要不是以前用過nodemon 早放棄了.

相關文章
相關標籤/搜索