2019-04-01

一辛孵、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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市姻采,隨后出現(xiàn)的幾起案子伤提,更是在濱河造成了極大的恐慌,老刑警劉巖株搔,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剖淀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡纤房,警方通過(guò)查閱死者的電腦和手機(jī)纵隔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炮姨,“玉大人捌刮,你說(shuō)我怎么就攤上這事∈姘叮” “怎么了绅作?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛾派。 經(jīng)常有香客問(wèn)我俄认,道長(zhǎng),這世上最難降的妖魔是什么洪乍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任眯杏,我火速辦了婚禮,結(jié)果婚禮上壳澳,老公的妹妹穿的比我還像新娘岂贩。我一直安慰自己,他們只是感情好巷波,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布萎津。 她就那樣靜靜地躺著卸伞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锉屈。 梳的紋絲不亂的頭發(fā)上荤傲,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音部念,去河邊找鬼弃酌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛儡炼,可吹牛的內(nèi)容都是我干的妓湘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乌询,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼榜贴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起妹田,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唬党,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鬼佣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體驶拱,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年晶衷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蓝纲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晌纫,死狀恐怖税迷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锹漱,我是刑警寧澤箭养,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站哥牍,受9級(jí)特大地震影響毕泌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗅辣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一懈词、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辩诞,春花似錦、人聲如沸纺涤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至外永,卻和暖如春崎脉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伯顶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工囚灼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祭衩。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓灶体,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掐暮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝎抽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Vue.js工程化項(xiàng)目起步——vue-router-demo: 本例主要采用vue-cli配合webpack來(lái)創(chuàng)建...
    詛咒獵豹閱讀 218評(píng)論 0 0
  • 一. 復(fù)習(xí): 1.服務(wù)器的結(jié)構(gòu)類型有哪些?簡(jiǎn)單說(shuō)明答:機(jī)架式服務(wù)器路克、刀片式服務(wù)器樟结、塔式服務(wù)器、云服務(wù)器 2.在32...
    杰S咪閱讀 541評(píng)論 0 0
  • 隨著技術(shù)的積淀精算,AI正在走出象牙塔和實(shí)驗(yàn)室瓢宦,步入商業(yè)世界,成為撬動(dòng)社會(huì)發(fā)展和經(jīng)濟(jì)增長(zhǎng)的新杠桿灰羽。人工智能的發(fā)展為世界...
    Feather輕飛閱讀 356評(píng)論 0 0
  • 在沒(méi)有遇見(jiàn)愛(ài)情前谦趣,這十九問(wèn)特別適合我拿去相親疲吸,哈哈哈 為人父母,這么重大的事前鹅,卻不需要通過(guò)考試摘悴,準(zhǔn)備好房和車就行啦...
    柴可夫斯輝閱讀 1,234評(píng)論 0 0
  • View 是 Android 中所有控件的基類,如:Object——View——TextView——ButtonO...
    hexiaosa閱讀 135評(píng)論 0 0