0.1.3 • Published 6 years ago

@c42/feathers-a v0.1.3

Weekly downloads
1
License
UNLICENSED
Repository
-
Last release
6 years ago

c42-template-feathers

基于 expressfeathersjs@c42/commons 的后端项目样板

安装

按照 克隆项目 的提示,克隆本项目到本地,并 copy 到你真正的开发目录。

注意不要 copy /.git 目录,否则会把你真正开发项目的 .git 目录覆盖掉。

如果要使用 linux cp 命令移动项目,注意要加 -a 参数,以防遗漏隐藏文件。

克隆并 copy 完毕之后,进入你的开发项目目录,运行 yarn 进行初始化安装。

强烈建议使用 yarn 代替 npm

开发

yarn dev # 以 src/index.js 为入口,利用 nodemon 实现热加载

lint

npm run lint # 运行 eslint

每次 git commit 时都会自动先执行 yarn lint,所以 commit 一般会花十几秒钟才能完成。

如果 lint 不通过,则拒绝 commit。

构建

yarn build # 构建并打开构建报告 .build.report.html

为什么后端也需要构建?因为 dev 时用 babel-register 实时转化 es6 语法的效率较低。backpack/webpack 打包后执行效率稍高。

  1. 如果开发的是一个完整的后端 app,不应该存在 src/export.js。此时构建以 src/index.js 为入口。
  2. 如果开发的是一个需要对外发布的 vue 组件,应该存在 src/export.js。此时构建以 src/export.js 为入口。

请注意,src/export.js 文件是否存在,决定了构建的入口以及其他很多具体行为。src/export.js 非常重要!

打包得到的 bundle 文件位置: ./dist/main.js。其中并不包含 node_modules 里面的模块。

构建完成后相关报告会保存在 .build.report.html 中。

Caveats

backpack 打包之后 __dirname__filename 等和运行环境路径相关的变量的值的含义会发生变化,所以请避免在代码中使用 __dirname__filename

生产

yarn start

如果开发的是一个模块,则 yarn start 命令没有意义。

发布

如果开发的是一个需要对外发布的 middleware、service 等模块,由 src/export.js 指定哪个文件是要对外发布的模块的入口。发布流程为:

npm version major|minor|patch # 发布前要先根据本次修改的性质升级版本号
npm publish # 之前需要先注册并登录 npmjs.com 帐号,并确保正在使用 npmjs.com 官方源。可以使用 nrm 来切换源。

如果开发的是一个完整的 app,则并不存在发布这个概念。在此情况下,为了防止误操作发布,请设置 package.json 中的 private 字段为 true

测试

yarn unit # 单元测试
yarn coverage # 单元测试 + 测试覆盖率统计
yarn test # 运行 eslint + 单元测试 + 测试覆盖率统计

配置

后端 feathers 配置文件:/feathers.config.js。用法详见 createApp 注释及源码。

生产环境部署常常需要通过环境变量来传入配置信息。通过设置特定环境变量,可以在不修改 feathers.config.js 源码的前提下动态指定一些配置的值。

比如,假设项目名称(即 package.json 里的 name 取值,把所有 @ 删除,再把所有 /- 替换成 _,即得到真实项目名称)为 project_a,则:

  • ~/.bashrc 中设置环境变量 export PROJECT_A_PROD_PORT=1234,即可动态指定生产环境(yarn start)下的端口为 1234

  • ~/.bashrc 中设置环境变量 export PROJECT_A_DEV_MONGODB="someurl",即可动态指定开发环境(yarn dev)下的 mongodb 地址为 someurl

  • ~/.bashrc 中设置环境变量 export PROJECT_A_TEST_FAVICON="somepath",即可动态指定测试环境(yarn unityarn coverageyarn test)下的 favicon 路径为 somepath

至于具体哪些配置项可由环境变量所动态指定,请见 feathers.config.js 源码中包含 getEnv(...) 的部分。

调试

  1. 程序内分级 log

    app.log('info', 'xxxx')
    app.error('xxxx')
    app.warn('xxxx')
    app.info('xxxx')
    app.debug('xxxx')

    log 的具体显示可由 C42_LOG_LEVEL, C42_LOG_PRETTY and C42_LOG_TIME 这三个环境变量控制:

    C42_LOG_LEVEL=info C42_LOG_PRETTY=true C42_LOG_TIME=true npm start

    C42_LOG_LEVEL=error|warn|info|verbose|debug|silly: 调用 app[level]() 时,只有级别高于 C42_LOG_LEVEL 的 log 可以显示。error 是最高级,silly 是最低级。默认级别为 silly,也就是默认所有级别的 log 都显示。

    C42_LOG_PRETTY=true:美化显示,但是会占用更多的行数。默认 false

    C42_LOG_TIME=true:显示时间。默认 false

  2. 自动 log 所有的中间件 request 和钩子 context 信息

    使用环境变量 C42_LOG_ALL=true 严重影响性能,仅用于调试,禁止用于生产环境!

    C42_LOG_ALL=true C42_LOG_TIME=true npm dev

    or

    C42_LOG_ALL=true C42_LOG_LEVEL=debug npm test

    也可以只自动 log 所有中间件 request,比如:

    C42_LOG_ALL_REQUESTS=true npm dev:server

    或只自动 log 所有钩子 context,比如:

    C42_LOG_ALL_CONTEXTS=true npm dev
  3. 自动进行性能 profiling

    C42_PROFILER=true npm start

    or

    C42_PROFILER=true C42_PROFILER_STATS=total npm start

    此时可以使用 app.get('profiler').print() 方法打印 profiler 统计信息。

前置知识