一辛孵、Init Project
新建目錄
mkdir koa2
cd koa2
初始化yarn項(xiàng)目
yarn init
引入koa2
yarn add koa
做服務(wù)當(dāng)然少不了日志啦
引入colors
yarn add colors
logger.js
import colors from 'colors';
export default {
info(msg) {
console.log(`[Info] ${colors.white(msg)}`)
},
success(msg) {
console.log(`[success] ${colors.green(msg)}`)
},
warn(msg) {
console.log(`[Warn] ${colors.yellow(msg)}`)
},
error(msg) {
console.log(`[Error] ${colors.red(msg)}`)
}
};
配置babel
1氏身、首先koa官方推薦使用 Babel 實(shí)現(xiàn) Async 方法(其實(shí)不加也不會(huì)報(bào)錯(cuò),姿勢(shì)不對(duì)?)
要在 node < 7.6 版本的 Koa 中使用
async
方法, 我們推薦使用 babel's require > hook.require('babel-register'); // 應(yīng)用的其余 require 需要被放到 hook 后面 const app = require('./app');
要解析和編譯 async 方法, 你至少應(yīng)該有 [transform-async-to-generator]> (https://babel.bootcss.com/docs/plugins/transform-async-to-> generator/) 或 [transform-async-to-module-method]> (https://babel.bootcss.com/docs/plugins/transform-async-to-module-method/) 插件.
例如, 在你的.babelrc
文件中, 你應(yīng)該有:{ "plugins": ["transform-async-to-generator"] }
你也可以用 env preset 的 > target 參數(shù)
"node": "current"
替代.
官方推薦的是Babel 7.x以前的做法,作為跨時(shí)代的青年熊昌,我們當(dāng)然會(huì)選擇Babel 7.x后的做法
其實(shí)使用起來(lái)區(qū)別也不大,Babel 7使用@babel/register代替了原來(lái)的babel-register
yarn add @babel/register --dev
then 在你的入口文件中首先引入它
require('@babel/register')
....
2湿酸、Node 在默認(rèn)情況下是不支持 import 和 export 的
這里可以分為開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境
開(kāi)發(fā)環(huán)境可以使用 babel-node婿屹,來(lái)運(yùn)行含有 import/export 語(yǔ)法的 js 代碼。
注意:babel-node 不能用于生產(chǎn)環(huán)境推溃!因?yàn)?babel-node 會(huì)加載更多資源和模塊昂利,使得運(yùn)行環(huán)境變「重」。
2.1铁坎、安裝 babel-node
babel-node 命令并非獨(dú)立安裝蜂奸,在 Babel 7.x 以前,需要通過(guò)安裝 babel-cli 包獲得厢呵。而在 Babel 7.x 以后窝撵,babel 的模塊被被拆分。因此需要安裝 @babel/core @babel/node 兩個(gè)包來(lái)獲取襟铭。
yarn add @babel/cli @babel/core @babel/node --dev
yarn add core-js
2.2、安裝 presets 并配置 .babelrc 文件
僅單安裝 babel-node 也沒(méi)用短曾,運(yùn)行 js 文件后你會(huì)發(fā)現(xiàn)依然報(bào)錯(cuò)寒砖。這是因?yàn)?babel-node 對(duì) import 語(yǔ)法默認(rèn)也是關(guān)閉的,因此需要安裝指定的 preset 并配置 .babelrc 文件來(lái)開(kāi)啟語(yǔ)法支持嫉拐。
截止2019年1月哩都,原有的 babel-preset-es2015 寫(xiě)法已經(jīng)廢棄,與之代替的是 babel-preset-env 或者 @babel/preset-env婉徘,推薦后者漠嵌。
yarn add @babel/preset-env
.babelrc
{
"presets": [
["@babel/preset-env", {
"debug": false,
"useBuiltIns": "usage"
// useBuiltIns參數(shù)
// entry:在引用程序入口導(dǎo)入一次babel/polyfill咐汞,多次導(dǎo)入可能會(huì)有全局沖突或其他問(wèn)題。
// usage:自動(dòng)為每個(gè)文件添加特定的polyfill
// false:不要為每個(gè)文件自動(dòng)添加polyfill儒鹿,也不要將“@babel/polyfill”導(dǎo)入到單個(gè)polyfill化撕。
}]
],
}
2.3、執(zhí)行 babel-node
package.json
"scripts": {
"dev": "babel-node ./server/index.js"
}
npm run dev
- tips: 推薦使用nodemon運(yùn)行你的Node應(yīng)用约炎,nodemon監(jiān)視代碼中的每個(gè)更改植阴,并在您更改某些內(nèi)容時(shí)自動(dòng)再次啟動(dòng)應(yīng)用程序
yarn add nodemon --dev
then 改變你的啟動(dòng)命令
"scripts": {
"dev": "nodemon --exec babel-node ./server/index.js"
},
?
生產(chǎn)環(huán)境
Node 9提供了一個(gè)尚處于 Experimental 階段的模塊,讓我們可以拋棄 babel 等一類工具的束縛圾浅,直接在 Node 環(huán)境下使用 import/export掠手。
所以如果你是純node項(xiàng)目,并且node運(yùn)行環(huán)境 > 9
可以使用node新的--experimental-modules模式
用前須知
- Node 版本需在 9.0 及以上
- 不加 loader 時(shí)候狸捕,使用 import/export 的文件后綴名必須為 .mjs
首先將所有js文件后綴名都改為mjs
將啟動(dòng)命令修改"node --experimental-modules ./server/index.mjs"
此時(shí)你已經(jīng)不要require('@babel/register')虽抄,因?yàn)闆](méi)有require了
可以根據(jù)環(huán)境變量process.env.NODE_ENV判斷一下是否需要require('@babel/register')
npm run dev
enjoy it