blog icon indicating copy to clipboard operation
blog copied to clipboard

介绍 roadhog —— 让 create-react-app 可配的命令行工具

Open sorrycc opened this issue 7 years ago • 39 comments

库地址:https://github.com/sorrycc/roadhog

roadhog 是啥?

简单来说,roadhog 是可配置的 react-create-app

roadhog 是一个 cli 工具,提供 serverbuild 两个命令,分别用于本地调试和构建。命令行体验和 create-react-app 一致,配置略有不同,比如默认开启 css modules然后还提供了 JSON 格式的配置方式

命名来源?

http://ow.blizzard.cn/heroes/roadhog

为啥要有 roadhog ?

做 roadhog 有多方原因:

首先,create-react-app 体验实在太好了,细节做地很到位,比如启动成功后会自动打开浏览器窗口这个操作,会检查当前是否已经有打开当前 URL 的 Tab,有的话就刷新那个 Tab 。但可惜他并不支持配置,比如我们要用 less 和 css-modules,就不能使用了。相信会有不少人有同样的想法。

另外,我们目前是基于 atool-builddora 的工具套件。dora 有插件机制,atool-build 的配置和 webpack 一样,基于编程。这两种扩展方式都太灵活,灵活是优点,但导致我们做功能升级时需要考虑太多的事情,并且无法保证兼容。

那么 roadhog 的配置方式和之前的有何不同呢?

配置方式的选择

我们做 cli 工具有一段时间了,从 spm2, spm3, atool-build + dora 到现在的 roadhog。(目前 roadhog 并非 atool 的升级版,两者场景不同, atool 扩展性更好) 配置方式从 JSON 到编程,最终又回归到 JSON 。

roadhog 为啥用 JSON 格式的配置?

做 atool 的时候我们是用编程的配置方式,优点是灵活,可随意改变工具内置的 webpack 配置。

但缺点也很明显:

1. 配置麻烦

比如要删除内置的 CommonChunkPlugin,不加注释基本没人能看懂了。

// Don't extract common.js and common.css
webpackConfig.plugins = webpackConfig.plugins.filter(function(plugin) {
  return !(plugin instanceof webpack.optimize.CommonsChunkPlugin);
});

更多详见:https://github.com/dvajs/dva-cli/blob/1a4cb33/boilerplates/app/webpack.config.js

2. 工具升级困难

举一个实际的例子。

atool-build 内部配置有一段为:

{
  test: /\.css$/,
  loader: 'css!postcss'
}

后面由于一些原因,我们改成了:

{
  test: /\.css$/,
  loader: `${require.resolve('css')}!${require.resolve('postcss')}`
}

但立马导致一些用户出错,原因是他的配置里有判断 loader 内容是否为 css!postcss,这就让工具的升级寸步难行。

roadhog 配置

基于上面的原因,roadhog 的配置以 JSON 格式呈现。

下面是目前支持的全部配置项,他们在 roadhog#配置 中有详细解释:

{
  "entry": "src/index.js",
  "disableCSSModules": false,
  "less": false,
  "publicPath": "/",
  "extraBabelPlugins": [],
  "autoprefixer": null,
  "proxy": null,
  "env": null,
}

以及未来可能支持的配置项:https://github.com/sorrycc/roadhog/issues?q=is%3Aissue+is%3Aopen+label%3Aconfig 。

体验 roadhog

安装 roadhog:

$ npm i roadhog -g

新建项目目录:

$ mkdir myapp && cd myapp

创建 package.json,内容为:

{}

创建 src/index.js,内容为:

import './index.html';
document.write('Hello, roadhog!');

创建 src/index.html,内容为:

<script src="index.js"></script>

启动:

$ roadhog server

正常的话,会自动帮你打开浏览器,你会看到 Hello, roadhog!


(完)

sorrycc avatar Dec 15 '16 09:12 sorrycc

+1

afc163 avatar Dec 15 '16 09:12 afc163

:thumbsup:

我在当前工程安装的roadhog , 每次启动都会新开一个Tab (ubuntu16.04 chrome 55), 并不会直接刷新已有的Tab.

codering avatar Dec 15 '16 09:12 codering

这个特性只对 mac 有效,基于 applescript 实现的,https://github.com/facebookincubator/create-react-app/blob/master/packages/react-dev-utils/openChrome.applescript 。

sorrycc avatar Dec 15 '16 09:12 sorrycc

@sorrycc 可以配置不开启吗? 非mac用户表示宁愿自己刷新:cry:

codering avatar Dec 15 '16 09:12 codering

@codering 下个版本加上,https://github.com/sorrycc/roadhog/issues/16

sorrycc avatar Dec 15 '16 09:12 sorrycc

改变端口,会有如下提示

Something is already running on port 9600.

Would you like to run the app on another port instead? [Y/n]

codering avatar Dec 15 '16 10:12 codering

这是端口被占用的提示。

sorrycc avatar Dec 15 '16 14:12 sorrycc

不论换哪个端口都一样

codering avatar Dec 15 '16 14:12 codering

@codering https://github.com/sorrycc/roadhog/commit/4a619f5

sorrycc avatar Dec 15 '16 23:12 sorrycc

[email protected], https://github.com/sorrycc/roadhog/releases/tag/0.2.0

screen shot 2016-12-16 at 9 36 51 am

sorrycc avatar Dec 16 '16 04:12 sorrycc

HELLO, 目前在尝试 12 步 30 分钟,完成用户管理的 CURD 应用 (react+dva+antd) 在 window10 x64 无法正常运行 dva-example-user-dashboard 问题如下 image

pillar258 avatar Dec 24 '16 15:12 pillar258

@pillar258 node 版本需要 6.5 或以上。

sorrycc avatar Dec 24 '16 22:12 sorrycc

@sorrycc 目前我们很多人在用dva windows环境 更新到roadhog以后遇到各种问题,截图如下: image

jayguojianhai avatar Dec 26 '16 03:12 jayguojianhai

@jayguojianhai node 要 6.5 或以上。

sorrycc avatar Dec 26 '16 07:12 sorrycc

好的。谢谢,已经解决了。

pillar258 avatar Dec 26 '16 07:12 pillar258

您好, 非常感谢您们提供如此优秀和易用的 cli, 使用 dva 和 antd开发体验相当愉快. 这里有一个问题需要请教, 如果我需要在全局引入某个 css 而不是通过 css modules 的方式该怎样引入? 是通过修改.roadhogrc文件进行配置, 还是通过其他方式?

mansters avatar Jan 11 '17 03:01 mansters

@mansters 有几种方式:

  1. node_modules 下的 css 不会做 css modules 处理,所以如果是依赖里的 css 可以直接引入
  2. css 文件放 public 目录,然后在 html 里直接引,参考 https://github.com/sorrycc/roadhog#使用-public-目录
  3. 改 css 文件,加 :global 前缀

sorrycc avatar Jan 11 '17 04:01 sorrycc

@sorrycc 好的 学习了 非常感谢

mansters avatar Jan 14 '17 04:01 mansters

mark

henryzp avatar Mar 16 '17 07:03 henryzp

@sorrycc 请问roadhog怎样在打包后在文件名中加入随机版本号, 已解决版本更新后的浏览器缓存问题

ZiYuEdward avatar Apr 05 '17 02:04 ZiYuEdward

@ZiYuEdward 你的这个问题解决了吗???

linyongping avatar Apr 07 '17 02:04 linyongping

@sorrycc 请问如果我想配置一些自定义的loader,比如说使用url-loader图片小于10kb采用base64的方式嵌入,roadhog可以实现吗

a82448186 avatar Apr 17 '17 07:04 a82448186

dev环境下 打包很慢 修改一个文件后 浏览器卡在那半天才刷新 有什么方法 可以分析打包过程吗

encorehe avatar Apr 27 '17 01:04 encorehe

👍

ikobe-zz avatar May 04 '17 04:05 ikobe-zz

hello 我在使用dva-cli创建移动项目有个问题,在roadhogrc.js里面配好icon的设置,但是没办法生效

huangduzhang avatar May 04 '17 05:05 huangduzhang

@ZiYuEdward 版本号用文件的md5比较好, 不要用随机字符.

holynova avatar May 15 '17 07:05 holynova

貌似roadhog不能像create-react-app和dva-cli一样使用命令构建初始化项目,请问是没有提供这个功能还是我不会用!

Yashiro avatar Sep 06 '17 06:09 Yashiro

roadhog 不包含项目初始化功能。

sorrycc avatar Sep 06 '17 13:09 sorrycc

请问一下 我在设置一个环境变量之后,在项目里process.env为何只有development而没有我自己定义的变量?

LDmin avatar Sep 16 '17 04:09 LDmin

@LDmin 需要用 define 配进去才会有,项目里不会自动读全部环境变量的。

sorrycc avatar Sep 16 '17 07:09 sorrycc

问题1:执行npm run build命令时,会将mock文件夹内的代码打包进入口文件里面吗? 问题2:如果问题1答案为不会,如果我希望打包进入口文件里面,从哪里能配置吗? 以上,谢谢!

ronffy avatar Oct 20 '17 08:10 ronffy

没有配置node-sass,sass-loader的例子吗,很难受

docwhitetell avatar Oct 28 '17 03:10 docwhitetell

roadhog 默认将js自动注入html页面的路径和名称是什么()?

fengyun2 avatar Nov 17 '17 01:11 fengyun2

postcss加入后,怎么排除node_modules下的不编译成rem ?

angelyu2014 avatar Dec 31 '17 08:12 angelyu2014

解决了我在js中引入css文件中变量无效的问题,很好

sminocence avatar May 11 '18 03:05 sminocence

你好大神 我在umi2.x dva ant-design-pro 中使用了single-spa-react 微前端,你们有类似的案例吗

jinyindu avatar Mar 06 '19 09:03 jinyindu

dva 项目打包需要20分钟,roadhog有什么优化的地方吗??

ludan1107743896 avatar Dec 19 '19 06:12 ludan1107743896

这个特性只对 mac 有效,基于 applescript 实现的,https://github.com/facebookincubator/create-react-app/blob/master/packages/react-dev-utils/openChrome.applescript 。

mark

tageecc avatar Apr 23 '20 10:04 tageecc

dva 项目打包需要20分钟,roadhog有什么优化的地方吗??

遇到了同样的问题,我这边打包要半小时,编译一次要3分钟。想知道怎么才能优化呢?

Yana5417 avatar May 30 '20 06:05 Yana5417