多框架管理 - Pro

steamer-plugin-pro

多框架管理工具

NPM Version Travis Deps Coverage

安装

  1. npm i -g steamerjs
  2. npm i -g steamer-plugin-pro

项目结构

通常来说,会有两种的项目结构

  • 兄弟结构
  1. Main Porject
  2. |---- A Project
  3. |---- B Project
  • 父子结构
    • 默认, steamer-plugin-pro 只会搜索到第2层
  1. Main Project
  2. |
  3. |---- A Project
  4. |
  5. |---- B Project

初始化

如果你希望 steamer-plugin-pro 自动检测你的项目,你需要适当改动你的子项目的 package.json。 下面的 name, startdist 就是会使用到的值。

  1. {
  2. "name": "steamer-project",
  3. "scripts": {
  4. "start": "",
  5. "dist": "",
  6. },
  7. }

下面是一个展示的例子, steamer-plugin-pro 会生成 steamer-plugin-pro.js 配置文件.

  1. steamer pro -i
  2. or
  3. steamer pro --init
  4. // 父项目为第0层,一直搜索到第4层
  5. steamer pro -i -l 4
  6. or
  7. steamer pro --init --level 4
  8. // 无论 `steamer-plugin-pro.js` 配置文件是否存在,直接覆盖
  9. steamer pro -i -f
  10. or
  11. steamer pro --init --force

package.json中的 name 值,直接作为 project 的值. package.json 里的 scripts中,startdist 被用于配置中的 cmds 值。

src 值,则表示子项目文件的相对位置。

  1. module.exports = {
  2. "plugin": "steamer-plugin-pro",
  3. "config": {
  4. "projects": {
  5. "steamer-project": {
  6. "src": "project",
  7. "cmds": {
  8. "start": "",
  9. "dist": ""
  10. }
  11. },
  12. "steamer-koa": {
  13. "src": "koa",
  14. "cmds": {
  15. "start": "node-dev ./app.js",
  16. "dist": ""
  17. }
  18. },
  19. "steamer-model": {
  20. "folder": "model",
  21. "cmds": {
  22. "start": "gulp&&node ./webpack.server.js",
  23. "dist": "gulp sprites&&export NODE_ENV=production&&webpack"
  24. }
  25. },
  26. "steamer-react": {
  27. "folder": "react",
  28. "cmds": {
  29. "start": "gulp&&node ./webpack.server.js",
  30. "dist": "gulp sprites&&export NODE_ENV=production&&webpack"
  31. }
  32. }
  33. },
  34. "steps": {
  35. "start": {},
  36. "dist": {}
  37. }
  38. }
  39. }

开发或发布你的项目

  • 开发项目
  1. // 开发所有项目
  2. steamer pro -s
  3. or
  4. steamer pro --start
  5. // 只开发特定项目
  6. steamer pro -s steamer-react
  7. or
  8. steamer pro --start steamer-react
  • 发布项目
  1. // 发布所有项目
  2. steamer pro -d
  3. or
  4. steamer pro --dist
  5. // 只发布特定项目
  6. steamer pro -d steamer-react
  7. or
  8. steamer pro --dist steamer-react

你也可以设置以下的回调函数,config 会作为参数传递到回调函数中。

  • config.currentProject

    • 当前子进程的执行的项目
  • config.isEnd

    • 只会在 finish 回调中出现, 如果是 true, 表示所有子进程结束
  1. "steps": {
  2. "start": {
  3. start: function(config) { // 命令开始
  4. console.log("=====start=====");
  5. console.log(config);
  6. },
  7. finish: function(config) { // 命令结束
  8. if (config.isEnd) {
  9. console.log("======end=====");
  10. }
  11. }
  12. },
  13. "dist": {
  14. start: function(config) { // 命令开始
  15. console.log("=====start=====");
  16. console.log(config);
  17. },
  18. finish: function(config) { // 命令结束
  19. if (config.isEnd) {
  20. console.log(config);
  21. }
  22. }
  23. }
  24. }

有时候,你会希望将各个子项目中的 dist 文件夹中的文件,全部放置到父项目文件夹的某个文件夹中,这时,首先你可以在各个项目的配置中,添加 dist 字段,记录子项目的 dist 目录将会生成父项目的某个文件夹,如下,设置 dist 的值为 dist 表示,将子项目的dist目录,将生成到父项目的dist目录下。插件强制规定子项目线上代码必须放在dist中(符合steamer` starter kit 的规范),你无法定制。

  1. "projects": {
  2. "steamer-react": {
  3. "src": "steamer-react",
  4. "dist": "dist",
  5. "cmds": {
  6. "start": "node ./tools/start.js",
  7. "dist": "node ./tools/dist.js"
  8. }
  9. },
  10. "steamer-simple": {
  11. "src": "steamer-simple",
  12. "dist": "dist",
  13. "cmds": {
  14. "start": "node ./tools/start.js",
  15. "dist": "node ./tools/dist.js"
  16. }
  17. }
  18. },

然后,当 steamer pro -d 编译结束后,在调用 steps.dist.finish 回调时,调用插件内置的方法 this.copyToDist,如下,插件会帮你完成此功能:

  1. ...
  2. "steps": {
  3. "start": {},
  4. "dist": {
  5. start: function(config) {
  6. console.log("=====start=====");
  7. // console.log(config);
  8. },
  9. finish: function(config) {
  10. if (config.isEnd) {
  11. this.copyToDist();
  12. }
  13. }
  14. }
  15. }

如果你想进行深度定制,你可以通过 config 参数,获取各项目的相关位置信息,然后自己进一步写逻辑定制。

开发

  1. // 将此模块链接到全局下
  2. npm link
  3. // 进入specPlugin中,在project2/steamer-simple, project2/steamer-react, project3/steamer-simple中安装依赖
  4. // 运行测试用例
  5. npm i -g eslint // 安装eslint
  6. npm test