美文网首页
2019-04-01

2019-04-01

作者: 折木丶青梵 | 来源:发表于2019-04-01 17:30 被阅读0次

    一、Init Project

    新建目录

    mkdir koa2
    cd koa2
    

    初始化yarn项目

    yarn init
    

    引入koa2

    yarn add koa
    

    做服务当然少不了日志啦

    引入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 实现 Async 方法(其实不加也不会报错,姿势不对?)

    要在 node < 7.6 版本的 Koa 中使用 async 方法, 我们推荐使用 babel's require > hook.

    require('babel-register');
    // 应用的其余 require 需要被放到 hook 后面
    const app = require('./app');
    

    要解析和编译 async 方法, 你至少应该有 [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 文件中, 你应该有:

    {
      "plugins": ["transform-async-to-generator"]
    }
    

    你也可以用 env preset 的 > target 参数 "node": "current" 替代.

    官方推荐的是Babel 7.x以前的做法,作为跨时代的青年,我们当然会选择Babel 7.x后的做法
    其实使用起来区别也不大,Babel 7使用@babel/register代替了原来的babel-register

    yarn add @babel/register --dev
    

    then 在你的入口文件中首先引入它

    require('@babel/register')
    ....
    
    2、Node 在默认情况下是不支持 import 和 export 的

    这里可以分为开发环境和生产环境
    开发环境可以使用 babel-node,来运行含有 import/export 语法的 js 代码。

    注意:babel-node 不能用于生产环境!因为 babel-node 会加载更多资源和模块,使得运行环境变「重」。

    2.1、安装 babel-node
    babel-node 命令并非独立安装,在 Babel 7.x 以前,需要通过安装 babel-cli 包获得。而在 Babel 7.x 以后,babel 的模块被被拆分。因此需要安装 @babel/core @babel/node 两个包来获取。

    yarn add @babel/cli @babel/core @babel/node --dev
    yarn add core-js
    

    2.2、安装 presets 并配置 .babelrc 文件
    仅单安装 babel-node 也没用,运行 js 文件后你会发现依然报错。这是因为 babel-node 对 import 语法默认也是关闭的,因此需要安装指定的 preset 并配置 .babelrc 文件来开启语法支持。
    截止2019年1月,原有的 babel-preset-es2015 写法已经废弃,与之代替的是 babel-preset-env 或者 @babel/preset-env,推荐后者。

    yarn add @babel/preset-env
    

    .babelrc

    {
      "presets": [
        ["@babel/preset-env", {
          "debug": false,
          "useBuiltIns": "usage"
          // useBuiltIns参数
          // entry:在引用程序入口导入一次babel/polyfill,多次导入可能会有全局冲突或其他问题。
          // usage:自动为每个文件添加特定的polyfill
          // false:不要为每个文件自动添加polyfill,也不要将“@babel/polyfill”导入到单个polyfill。
        }]
      ],
    }
    

    2.3、执行 babel-node
    package.json

    "scripts": {
        "dev": "babel-node ./server/index.js"
    }
    
    npm run dev
    
    • tips: 推荐使用nodemon运行你的Node应用,nodemon监视代码中的每个更改,并在您更改某些内容时自动再次启动应用程序
    yarn add nodemon --dev
    

    then 改变你的启动命令

    "scripts": {
      "dev": "nodemon --exec babel-node ./server/index.js"
    },
    

     
    生产环境
    Node 9提供了一个尚处于 Experimental 阶段的模块,让我们可以抛弃 babel 等一类工具的束缚,直接在 Node 环境下使用 import/export。

    所以如果你是纯node项目,并且node运行环境 > 9
    可以使用node新的--experimental-modules模式

    用前须知

    • Node 版本需在 9.0 及以上
    • 不加 loader 时候,使用 import/export 的文件后缀名必须为 .mjs

    首先将所有js文件后缀名都改为mjs
    将启动命令修改

    "node --experimental-modules ./server/index.mjs"
    

    此时你已经不要require('@babel/register'),因为没有require了
    可以根据环境变量process.env.NODE_ENV判断一下是否需要require('@babel/register')

    npm run dev
    

    enjoy it

    相关文章

      网友评论

          本文标题:2019-04-01

          本文链接:https://www.haomeiwen.com/subject/ldrvbqtx.html