dora

dora 是什么?

dora - 图1

dora 是一个开发服务器,通过插件的方式集合各种调试方案,比如 webpack、livereload、browsersync、数据 mock、本地代理、weinre、jsonapi 等等。

dora 的名字取自哆啦A梦(doraemon),dora 的插件则象征着 doraemon 四维口袋里的各种未来道具。

为什么要有 dora ?

开源社区有很多优秀的工具,他们独立运行的时候一点问题都没有,但我们开发时通常需要组合使用多种工具,比如 webpack + livereload + jsonapi。

之前我们通常会有这些方法:

  1. 开多个 tab,分别启动各种工具
  2. 创建一个 server.js,通过编程的方式组合各种工具

而有了 dora 之后,则可以这么做:

  1. $ dora --plugins webpack,livereload,jsonapi

用法

下面以 dora-plugin-webpackdora-plugin-proxy 为例,介绍 dora 及其插件的用法。

快速上手

推荐把 dora 作为项目依赖来使用。

  1. $ mkdir dora-demo && cd dora-demo
  2. $ echo '{}' > package.json
  3. $ npm i dora -D
  4. $ ./node_modules/.bin/dora
  5. $ open http://localhost:8000/package.json

{% raw %}

{% endraw %}

dora 命令举例

  1. ## 载入 proxy, webpack 和 hmr 插件
  2. $ dora --plugins proxy,webpack,hmr
  3. ## 载入本地插件
  4. $ dora --plugins ./local-plugin
  5. ## 载入插件并附加参数
  6. $ dora --plugins webpack?publicPath=/foo/&verbose
  7. ## 载入插件,参数是 JSON 格式
  8. $ dora --plugins webpack?{"publicPath":"/foo/","verbose":true}

使用插件

通过 dora-plugin-webpack 插件实现 webpack 调试。

  1. $ npm i dora-plugin-webpack -D
  2. $ vi package.json
  3. + "entry": ["./index.js"]
  4. $ echo 'console.log(1);' > index.js
  5. $ ./node_modules/.bin/dora --plugins webpack
  6. $ open http://localhost:8000/index.js

{% raw %}

{% endraw %}

本地数据 mock

通过 dora-plugin-proxy 插件实现。

  1. $ npm i dora-plugin-proxy -D
  2. $ vi proxy.config.js
  3. + module.exports = {
  4. + 'GET /api/users': { data: [1, 2] },
  5. + };
  6. $ ./node_modules/.bin/dora --plugins webpack,proxy
  7. $ open http://localhost:8989/api/users

注意:这里访问的端口号是 8989 。

{% raw %}

{% endraw %}

proxy.config.js

更多 proxy.config.js 的配置方法:

  1. module.exports = {
  2. // Forward 到另一个服务器
  3. 'GET https://assets.daily/*': 'https://assets.online/',
  4. // Forward 到另一个服务器,并指定路径
  5. 'GET https://assets.daily/*': 'https://assets.online/v2/',
  6. // Forward 到另一个服务器,不指定来源服务器
  7. 'GET /assets/*': 'https://assets.online/',
  8. // 本地文件替换
  9. 'GET /local': './local.js',
  10. // Mock 数据返回
  11. 'GET /users': [{name:'sorrycc'}, {name:'pigcan'}],
  12. 'GET /users/1': {name:'jaredleechn'},
  13. // Mock 数据,基于 mockjs
  14. 'GET /users': require('mockjs').mock({
  15. success: true,
  16. data: [{name:'@Name'}],
  17. }),
  18. // 通过自定义函数替换请求
  19. '/custom-func/:action': function(req, res) {
  20. // req 和 res 的设计类 express,http://expressjs.com/en/api.html
  21. //
  22. // req 能取到:
  23. // 1. params
  24. // 2. query
  25. // 3. body
  26. //
  27. // res 有以下方法:
  28. // 1. set(object|key, value)
  29. // 2. type(json|html|text|png|...)
  30. // 3. status(200|404|304)
  31. // 4. json(jsonData)
  32. // 5. jsonp(jsonData[, callbackQueryName])
  33. // 6. end(string|object)
  34. //
  35. // 举例:
  36. res.json({
  37. action: req.params.action,
  38. query: req.query,
  39. });
  40. },
  41. };

参考链接