@c42/feathers-a
v0.1.3
Published
基于 [express](https://expressjs.com)、[feathersjs](https://feathersjs.com/) 和 [@c42/commons](https://code.aliyun.com/c42/commons) 的后端项目样板
Downloads
4
Readme
c42-template-feathers
基于 express、feathersjs 和 @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 打包后执行效率稍高。
- 如果开发的是一个完整的后端 app,不应该存在
src/export.js
。此时构建以src/index.js
为入口。 - 如果开发的是一个需要对外发布的 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 unit
、yarn coverage
、yarn test
)下的 favicon 路径为somepath
。
至于具体哪些配置项可由环境变量所动态指定,请见 feathers.config.js
源码中包含 getEnv(...)
的部分。
调试
程序内分级 log
app.log('info', 'xxxx') app.error('xxxx') app.warn('xxxx') app.info('xxxx') app.debug('xxxx')
log 的具体显示可由
C42_LOG_LEVEL
,C42_LOG_PRETTY
andC42_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
。自动 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
自动进行性能 profiling
C42_PROFILER=true npm start
or
C42_PROFILER=true C42_PROFILER_STATS=total npm start
此时可以使用
app.get('profiler').print()
方法打印 profiler 统计信息。
前置知识
@c42/commons:查阅 c42/commons/src 中的源代码注释,以熟悉 createApp、createHooks、configureMongoService 以及众多 hooks 的用法。