blog icon indicating copy to clipboard operation
blog copied to clipboard

roadhog 2.0 发布

Open sorrycc opened this issue 6 years ago • 110 comments

趁着元旦,roadhog 2.0 发布了,我们一起来看看有啥变化吧。

👏 👏 👏  

一、

首先,我们把底层重写,基于 af-webpack

为啥要基于 af-webpack?单看 roadhog,这意义不大,但如果有数个工具都基于 af-webpack 做上层封装,那么就意味着 webpack 工具层的配置统一。 尤其对我们内部来说,有 4-5 个工具,每个工具有各自的配置方法,对于开发者来说无疑是个灾难。对外部的同学来说,umi 和 roadhog 都基于 af-webpack,那么之后在这两个工具之间切换,webpack 的配置层是无需变动的。

另外,大家会发现 roadhog 的 issue 维护不太积极,是因为我的工作重心目前不在这,而是在 umi 上。所以切换到 af-webpack,af-webpack 是 umi 的底层共建,这样就可以变相地保证我在这个项目上的投入。

同时,为了更通用,配置文件从 .roadhogrc 更名为 .webpackrc

 

二、

然后,在体验上,保持了和 create-react-app 最新版一致。像是 redbox 显示出错信息、HMR、出错点击后跳转到 IDE、ESLint 出错提示等等。

并在此基础上,增加了:

  • 所有的配置都能自动生效(热更新或自重启)
  • dev server 断线重连
  • 配置项校验和提醒(同时出现在浏览器和控制台里)
  • 配置文件语法错误提示到行
  • ...

 

三、

roadhog 从命令的维度看,包含 dev (mock),build,test。

变化是:

  • 原 server 命令改名为 dev
  • dev 和 build 主要是配置上的变化
  • mock 保持不变
  • test 从 mocha 改为 jest,同时支持 UI 组件的测试

 

四、

配置项即功能,这里有比较大的变化。

不再支持的有:

  • multipage (use commons instead)
  • autoprefixer (use browserslist instead)
  • dllPlugin (学习成本太高,并且有其他方法可以提升 dev server 启动速度)
  • svgSpriteLoaderDirs
  • library
  • libraryTarget
  • cssModulesExclude

功能变化的有:

  • publicPath(dev 模式下的也可覆写了)
  • sass(值从 Boolean 改成 Object,内容为传给 node-sass 的配置项)

新的有:

  • babel
  • copy
  • commons
  • browserslist
  • alias (总算加上了,因为我发现 babel 插件代替不了 alias,因为 babel 不处理 node_modules)
  • devtool (可给生产环境开启 sourcemap 了)
  • extraResolveModules
  • manifest(生成 manifest.json)

 

五、

此外,还有一些变化:

  • 不再支持通过 src/index.ejs 的方式生成 Html

 

六、

最后,我们对照 ant-design-pro 的升级 PR 来看下如何升级到 raodhog@2 。

对于大部分的应用来说,只要:

  • 升级 roadhog 版本为 2.x
  • 更名 .roadhogrc 为 .webpackrc
  • 更名 roadhog server 为 roadhog dev

然后,由于内置了 babel@7

  • 如果你有用 babel-polyfill,更换为 @babel/polyfill
  • 如果有 babel-runtime 依赖和配置了 babel-plugin-transform-runtime 插件,需删除,因为已内置处理,否则可能会报 this.setDynamic is not a function 的错误
  • 由于 babel@7 无法使用 babel-plugin-add-module-exports,所有的 require('./file') 需改为 require('./file').default
  • 如果有用 babel-plugin-dva-hmr,请升级到 0.4.x,

再然后,如果有 src/index.ejs,需要额外配置 html 属性,

"html": { "template": "./src/index.ejs" }

最后,有些配置不再支持,需考虑替代方案或使用 webpack.config.js 进行配置。

 

(完)

sorrycc avatar Jan 02 '18 08:01 sorrycc

之前有用 src/index.ejs,需移到 public/index.html,并手动引入 CSS 和 JS

如果开启了 hash,这个 html 岂不是要手动维护。

afc163 avatar Jan 02 '18 08:01 afc163

这个 public/index.html dev 用(dev 时不会开 hash 的),build 后通常不会用到静态的 html。之前的 html 生成没处理好,很多反馈,就先下掉了,后面后需求再加上。

sorrycc avatar Jan 02 '18 08:01 sorrycc

这样会让人误解的,public/index.html 引用的 index.js 在 dist 里根本不存在。

afc163 avatar Jan 02 '18 08:01 afc163

那开个 html 的配置项,然后透传给 html-webpack-plugin 吧。

e.g.

"html": {
  "template": "./src/index.ejs"
}

sorrycc avatar Jan 02 '18 08:01 sorrycc

https://github.com/umijs/umi/pull/39

sorrycc avatar Jan 02 '18 09:01 sorrycc

“出错点击后跳转到 IDE” 这个 IDE如何设置?

elivoa avatar Jan 03 '18 03:01 elivoa

“出错点击后跳转到 IDE” 这个 IDE如何设置?

不用设置,自动判断的。

sorrycc avatar Jan 03 '18 03:01 sorrycc

不用设置,自动判断的。

我点击后打开的是sublime text,但是我想让他用web storm打开。是和操作系统的设置有关?比如js文件的默认打开程序?但是我.js默认使用VSCode打开的。

elivoa avatar Jan 03 '18 03:01 elivoa

你把 sublime 关了,然后开着 webstorm,看下是用什么打开的。

sorrycc avatar Jan 03 '18 03:01 sorrycc

明白了,要设置REACT_EDITOR环境变量

Could not open search.js in the editor. The editor process exited with an error: spawn code ENOENT.

To set up the editor integration, add something like REACT_EDITOR=atom to the .env.local file in your project folder and restart the development server. Learn more: https://goo.gl/MMTaZt

elivoa avatar Jan 03 '18 03:01 elivoa

由于 babel@7 无法使用 babel-plugin-add-module-exports,所有的 require('./file') 需改为 require('./file').default 感觉这个对原项目的改动会很多,暂时还是用1.3.0版本,等以后解决这个问题了再考虑升版本。

henry-fun avatar Jan 03 '18 07:01 henry-fun

dllPlugin (学习成本太高,并且有其他方法可以提升 dev server 启动速度)

有什么办法可以提高dev server速度的么?现在没了dll plugin,启动速度和重新编译速度都很慢。我的项目要半分钟了。原来使用dllplugin的时候是重编速度6-7秒。

elivoa avatar Jan 03 '18 07:01 elivoa

有什么办法可以提高dev server速度的么?现在没了dll plugin,启动速度和重新编译速度都很慢。我的项目要半分钟了。原来使用dllplugin的时候是重编速度6-7秒。

按需编译,umi 里有实现。

sorrycc avatar Jan 04 '18 08:01 sorrycc

感觉这个对原项目的改动会很多,暂时还是用1.3.0版本,等以后解决这个问题了再考虑升版本。

require 用的地方应该不多吧,大部分应该是 import 才对。而且 require().default 是标准的写法,应该不会再回去了,拥抱变化吧,🤗。

sorrycc avatar Jan 04 '18 08:01 sorrycc

👍 2.0 普天同庆

  • commons 这个选项给了代码块分割手动干预的更多定制
  • definealias 简直是目录结构强迫症的福音 除了create-react-app外,用来快速迭代,接近0配置的不二选择。

HeskeyBaozi avatar Jan 04 '18 10:01 HeskeyBaozi

不支持装饰器的写法了吗?

iceberg211 avatar Jan 04 '18 13:01 iceberg211

不支持装饰器的写法了吗?

要额外引 babel 插件的,1.0 的时候也是这样。

sorrycc avatar Jan 04 '18 13:01 sorrycc

commons 可以提高开发时修改之后重新编译的时间么?

不能。

sorrycc avatar Jan 04 '18 13:01 sorrycc

要额外引 babel 插件的,1.0 的时候也是这样。 是babel-plugin-transform-decorators-legacy吧,我在.webpackrc这样配的

  "extraBabelPlugins": [
        "transform-decorators-legacy",
        "lodash", ["import", { "libraryName": "antd-mobile", "style": true }]
    ],

其他的步骤也照做了

iceberg211 avatar Jan 05 '18 01:01 iceberg211

dva new 创建项目后,手动升级[email protected],严格按照上面修改,但编译失败了。

image .webpackrc 文件配置: image

bibiehy avatar Jan 05 '18 08:01 bibiehy

@bibiehy 如果有 babel-runtime 依赖和配置了 babel-plugin-transform-runtime 插件,需删除,因为已内置处理,否则可能会报 this.setDynamic is not a function 的错误

sorrycc avatar Jan 05 '18 08:01 sorrycc

@sorrycc 谢谢,2个都删除掉,修改"extraBabelPlugins": ["@babel/transform-runtime"]就好了。

还一个问题,js 校验工具ESLint 的配置在哪里修改或者禁用。

@+babel/transform-runtime不见了。|- _ -

bibiehy avatar Jan 05 '18 10:01 bibiehy

可以 DISABLE_ESLINT roadhog dev 禁用,修改的话本地配 .eslintrc 就好了。

sorrycc avatar Jan 05 '18 10:01 sorrycc

No more --watch for roadhog build? I need that... I'm building for a non-browser app and I need to build on every change. The watch option made it very fast. Now if I set a watch task, it rebuilds everything on every change, which is too slow for me.

Tsury avatar Jan 06 '18 15:01 Tsury

@Tsury thanks for feedback, it's supported in [email protected] .

sorrycc avatar Jan 07 '18 03:01 sorrycc

@sorrycc thanks! Another request - is it possible to build in debug? I'm trying to build, but it only builds for production.

I see this line in af-webpack build.js line 32: process.env.NODE_ENV = 'production'; // These sizes are pretty large. We'll warn for bundles exceeding them.

Then in af-webpack's getConfig.js file line 66: const isDev = process.env.NODE_ENV === 'development';

And then everything in the config is optimized for release (uglified, etc...) because isDev === false.

Is there a way to build debug output files (no dev server)? No compression, no optimizations.

Tsury avatar Jan 08 '18 22:01 Tsury

@Tsury No compression is supported by NO_COMPRESS=1 roadhog build.

sorrycc avatar Jan 08 '18 22:01 sorrycc

It's still not enough. There are properties in the config that are determined solely by 'isDev', which is false. When I set NO_COMPRESS=1, my binary get's just a little bigger (~1.7mb), but it still very optimized. When I force isDev === true, the binary get's huge (5.5mb), and there's no compression.

Also, another issue - because of: process.env.NODE_ENV = 'production'; // These sizes are pretty large. We'll warn for bundles exceeding them.

This line forces my ENV to be production, and then my 'production' configuration in .webpackrc.js is used, instead of my development configuration.

Something here looks a little awkward to me.

EDIT: I would just like to control the NODE_ENV myself, and build debug, without af-webpack forcing it to be 'production'... EDIT 2: This forcing of NODE_ENV will also make React run in production mode. To summarize - I can't currently use roadhog build and have NODE_ENV = 'development' LAST EDIT: I believe all of this is caused because now roadhog build --debug was removed.

Tsury avatar Jan 08 '18 22:01 Tsury

用roadhog和create-react-app脚手架创建的项目,体验和目录结构都一样,而且您也说过可以理解为roadhog是可配置版的create-react-app,那么请问一下roadhog形式的项目(比如用dva-cli创建的项目)是在create-react-app的代码基础上升级优化的么

wanghaomayu avatar Jan 11 '18 12:01 wanghaomayu

@wanghaomayu

  • roadhog 是工具,和项目(项目结构)无关
  • roadhog 基于 create-react-app 背后的 react-dev-utils,在此基础上做了一些优化

sorrycc avatar Jan 11 '18 13:01 sorrycc

@sorrycc 哦哦,基于react-dev-utils,谢谢

wanghaomayu avatar Jan 12 '18 12:01 wanghaomayu

删除了svgSpriteLoaderDirs那如何实现antd-mobile2的自定义图标呢? 按照https://mobile.ant.design/docs/react/upgrade-notes-cn#1.x-=>-2.0提供的CustomIcon的方法还是要用到svg-sprite-loader。 难道要自己写webpack.config.js?建议把这个选项加回来。

handsomeceleste avatar Jan 16 '18 03:01 handsomeceleste

less还不能用alias?

goonwzz avatar Jan 17 '18 10:01 goonwzz

@goonwzz 可以的,你用法不对吧,这里有例子 https://github.com/umijs/umi/tree/master/packages/af-webpack/test/fixtures/alias 。

sorrycc avatar Jan 17 '18 11:01 sorrycc

@handsomeceleste

  • antd-mobile@2 的 Icon 组件不再支持自定义 Icon 了。

考虑的原因主要是

  • svg 的使用成本高,强行捆绑给上手和配置带来很大复杂度。
  • 用户自己实现自定义 Icon 很简单,参考 https://mobile.ant.design/docs/react/upgrade-notes-cn#Icon
  • https://mobile.ant.design/docs/react/upgrade-notes-cn#Icon 升级文档里写的 CustomIcon 其实就是教用户自己在代码里封装一个业务组件 (只是为了方便简单升级)。
  • 既然是用户自己的组件了,要以什么方式处理 svg 可以自行选择,可以是通过 webpack loader 处理,包括 antd-mobile@1 推荐的 svg-sprite-loader, 也可以是 webpack 自己的 svg-inline-loader 等等。甚至也可以不依赖 webpack,直接在 react 组件里面写 svg 标签也可以。

paranoidjk avatar Jan 17 '18 12:01 paranoidjk

@sorrycc 使用antd发现无法按需加载,如图 qq20180119-201803 qq20180120-001157 项目地址:https://github.com/smithyj/backend.yangyj.com

smithyj avatar Jan 19 '18 16:01 smithyj

@smithyj 手动引了 antd 的 css ?

sorrycc avatar Jan 20 '18 01:01 sorrycc

@sorrycc 没有引用的,https://github.com/smithyj/backend.yangyj.com 这是项目地址

smithyj avatar Jan 20 '18 01:01 smithyj

@sorrycc thanks for version 2.2.0, now I have real debug mode 👍

I have an issue with svg support now. I tried to add support for svg-sprite-loader. I added this to my webpack.config.js:

  webpackConfig.module.rules.push({
    test: /\.svg$/,
    loader: require.resolve('svg-sprite-loader')
  });

  webpackConfig.plugins.push(
    new SpriteLoaderPlugin()
  );

But all of my svg's were base64. I debugged and saw that svg-sprite-loader was working, but url-loader was overriding it.

I look at the code of af-webpack and found this in getConfig.js, line 333:

          exclude: [
            /\.html|ejs$/,
            /\.json$/,
            /\.(js|jsx|ts|tsx)$/,
            /\.(css|less|scss|sass)$/,
          ],
          loader: require.resolve('url-loader'),

When I added /\.svg$/ to the exclude list, svg-sprite-loader worked just fine.

Is it possible to fix this somehow? Maybe add a flag to add svg tourl-loader? Something like svgUrlLoader: true

Thanks!

Tsury avatar Jan 20 '18 19:01 Tsury

@kingsily 这种问题就不用问了大兄弟 ,这是属于eslint验证问题 你ESLINT_DISABLE=true就好了

smithyj avatar Jan 24 '18 06:01 smithyj

@smithyj 如果一定要用这个eslint,那么.eslintrc要怎么修改,或者说有没有什么正确的配置

kingsily avatar Jan 24 '18 06:01 kingsily

如下代码,在 start 中 增加环境变量 cross-env DISABLE_ESLINT=true ,但是得先 npm install --save cross-env

{
  "private": true,
  "scripts": {
    "start": "cross-env DISABLE_ESLINT=true roadhog dev",
    "start:no-proxy": "cross-env NO_PROXY=true DISABLE_ESLINT=true roadhog dev",
    "build": "cross-env DISABLE_ESLINT=true roadhog build",
    "analyze": "cross-env ANALYZE=true roadhog build",
    "lint": "eslint --ext .js src test",
    "precommit": "npm run lint"
  },
  "dependencies": {
    "@babel/polyfill": "^7.0.0-beta.38",
    "antd": "^3.1.3",
    "autobind": "^1.0.3",
    "classnames": "^2.2.5",
    "dva": "^2.1.0",
    "dva-loading": "^1.0.4",
    "enquire-js": "^0.1.1",
    "lodash": "^4.17.4",
    "lodash-decorators": "^4.5.0",
    "moment": "^2.20.1",
    "path-to-regexp": "^2.1.0",
    "prop-types": "^15.6.0",
    "qs": "^6.5.1",
    "rc-drawer-menu": "^0.5.4",
    "react": "^16.2.0",
    "react-container-query": "^0.10.0",
    "react-document-title": "^2.0.3",
    "react-dom": "^16.2.0",
    "url-polyfill": "^1.0.10"
  },
  "devDependencies": {
    "babel-eslint": "^8.2.1",
    "babel-plugin-dva-hmr": "^0.4.1",
    "babel-plugin-import": "^1.6.3",
    "babel-plugin-transform-decorators-legacy": "^1.3.4",
    "cross-env": "^5.1.3",
    "eslint": "^4.14.0",
    "eslint-config-umi": "^0.1.1",
    "eslint-plugin-flowtype": "^2.34.1",
    "eslint-plugin-import": "^2.6.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-react": "^7.1.0",
    "husky": "^0.12.0",
    "mockjs": "^1.0.1-beta3",
    "redbox-react": "^1.4.3",
    "roadhog": "^2.2.0",
    "roadhog-api-doc": "^1.0.0"
  }
}

smithyj avatar Jan 24 '18 07:01 smithyj

这是关闭验证的,如果你要验证的话 那就得好好学学 ESLINT 语法规范

smithyj avatar Jan 24 '18 07:01 smithyj

@smithyj 关闭验证倒不用那么麻烦直接set DISABLE_ESLINT=true&& roadhog dev就好了,不过还是谢谢了。

kingsily avatar Jan 24 '18 07:01 kingsily

@sorrycc @afc163 参考了上面的alias的配置,配置的内容如下

{
  "entry": "src/index.js",
  "extraBabelPlugins": [
    "transform-decorators-legacy",
    ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": true }]
  ],
  "alias": {
    "~": "./src/",
    "common": "./src/common/"
  },
....
}

但是不起作用,求助应该怎么修改?另外可否告知下此项目为何不用alias?是项目路径不深还是有其他考虑?

经自测,用绝对路径可以,如

  "alias": {
    "~": "/home/zcs/projects/antd-pro/src/"
  },

但是相对路径的方式不行,是否属于bug?请修复下~

lehug avatar Jan 24 '18 09:01 lehug

@lehug 是的,你看看webpack官方文档

smithyj avatar Jan 24 '18 14:01 smithyj

升级2.0之后打包,之前require.ensure动态加载的时候可以配置chunk名字,现在用dynamic,要怎么配置chunk名字?

kingsily avatar Jan 24 '18 17:01 kingsily

@smithyj webpack的官方文档,需要path变量,用json方式无法配置吧?纯json方式,该怎么配置呢?

lehug avatar Jan 25 '18 01:01 lehug

@lehug 可以使用JS的配置方式,不使用json

i-smile avatar Jan 25 '18 09:01 i-smile

HMR热更新需要怎么配置吗?我的怎么好像都是全页面刷新呀~

i-smile avatar Jan 25 '18 09:01 i-smile

@paranoidjk antdmobile2版本 用CustomIcon 方式去手动加载svg 加载不出来svg的,并且通过CustomIcon require的svg 在前端展示成了 base64格式,这种算不算bug啊 image

devmsg avatar Jan 28 '18 01:01 devmsg

在.roadhogrc.mock.js 中添加代理 export default noProxy ? { 'POST /*': 'http://localhost:3000/', } : delay(proxy, 1000);

在服务端接受到的数据是 { '{"name":"name","password":"123","loginType":"10","type":"account"}': '' }

正确的应该是 { name: 'name', password: '123', loginType: '10', type: 'account' }

这是什么问题导致的,或者有什么其他的配置方法

jiajiuxing avatar Jan 30 '18 14:01 jiajiuxing

请问roadhog和umi区别在哪里呢?该怎么选择? @sorrycc

104gogo avatar Feb 01 '18 06:02 104gogo

同问 @104gogo

smithyj avatar Feb 02 '18 01:02 smithyj

@104gogo @smithyj https://umijs.org/docs/zh-Hans/faq.html#umi-dva-roadhog

sorrycc avatar Feb 02 '18 02:02 sorrycc

@sorrycc 请问现在加载svg都会转为base64,且无法显示,应该如何解决呢

zhouyi318 avatar Feb 04 '18 16:02 zhouyi318

手升到2.2,。删除了 babel-runtime 依赖和 babel-plugin-transform-runtime 插件,但是并不能实现按需加载 …… 目前加载奇慢……

Knove avatar Feb 06 '18 07:02 Knove

@KnoveZ 有重现 repo?

benjycui avatar Feb 06 '18 08:02 benjycui

@benjycui 木有。但是都是根据上文说的设置,一切都设置好了也能运行。就是和以前相比,不能按需加载了。 哎,暂时还是不升级了。太慢了。好几分钟

Knove avatar Feb 06 '18 09:02 Knove

Hello,I'm a newcomer of GitHub. May I ask you a question, please. Through the topic,you have successfully used svg-sprite-loader in roadhog2.0, how your webpack.config.js is configured.

My webpack.config.js is as follows, and it's report errors:require(...) is not a function. module.exports = { module: { loaders: [ { test: /.svg$/, loader: 'svg-sprite-loader' } ] } }

birdycn avatar Feb 16 '18 15:02 birdycn

去掉了cssModulesExclude 有什么好的替代方案么?

jinyang1994 avatar Feb 25 '18 05:02 jinyang1994

I built project with dva-cli. It uses Roadhog 2.0. When I run it as roadhog server, I get incorrect source maps. They are after babel compilation (var instead of const, React code instead of JSX, etc.). Also there are no maps for css/less. I tryed to set up devtool, but it doesn't help, just move mapped files to another location in chrome debugger. Updating version to 2.2.0 doen't help too. Can you help me? Thanks.

urrri avatar Mar 01 '18 22:03 urrri

@urrri Try [email protected]

sorrycc avatar Mar 01 '18 23:03 sorrycc

@sorrycc Yes, it works!!!, but partially. Css/less still unavailable. BTW, is there any way to make it configurable? Because sometime it is simpler to debug compiled (but not bundled) code. Thank you

urrri avatar Mar 02 '18 08:03 urrri

有个问题,因为没有webpack.config.js ,我想在要打包的过程中对我自己的所有代码加try-catch。写哪里。看起来roadhog已经全部内部包装掉了

cpu220 avatar Mar 12 '18 10:03 cpu220

项目打包后怎么兼容ie9,由于打包之后远远大于250k,超出了ie9的css加载,怎么处理打包。

ludan1107743896 avatar Mar 27 '18 08:03 ludan1107743896

感觉打包过程很慢,如何加快打包速度?并且打包过程能否看到打包进度?

xiangweijun avatar Apr 10 '18 07:04 xiangweijun

请问 roadhog 支持编译 tsx , typescript  吗

lusess123 avatar Apr 13 '18 03:04 lusess123

@lusess123 支持。

sorrycc avatar Apr 13 '18 06:04 sorrycc

不喜欢roadhog, webpack可简单可复杂的灵活配置, roadhog所谓的简单 只是把常用的配置提取出来了而已,对于没有支持的配置项是不是就局限了呢。至少webpack大多数人都有配置经验,而roadhog又增加学习成本

--最近在用ant-pro模板,对webpack还算了解,发现roadhog不满足配置的时候 一点感想

jiangzm avatar Apr 21 '18 16:04 jiangzm

@jiangzm roadhog 黑盒化 webpack , 竞品是 facebook 的create-react-app , 本身也提供了webpack.config.js 的完全扩展。

lusess123 avatar Apr 21 '18 17:04 lusess123

可以单独建一个webpack.config.js,构成私有配置发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:jiangzm 收件人:sorrycc/blog 抄送:zhouyi [email protected],Comment 不喜欢roadhog, webpack可简单可复杂的灵活配置, roadhog所谓的简单 只是把常用的配置提取出来了而已,对于没有支持的配置项是不是就局限了呢。至少webpack大多数人都有配置经验,而roadhog又增加学习成本 --最近在用ant-pro模板,对webpack还算了解,发现roadhog不满足配置的时候 一点感想

—You are receiving this because you commented.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/sorrycc/blog"}},"updates":{"snippets":[{"icon":"PERSON","message":"@jiangzm in #55: 不喜欢roadhog, webpack可简单可复杂的灵活配置, roadhog所谓的简单 只是把常用的配置提取出来了而已,对于没有支持的配置项是不是就局限了呢。至少webpack大多数人都有配置经验,而roadhog又增加学习成本\r\n\r\n--最近在用ant-pro模板,对webpack还算了解,发现roadhog不满足配置的时候 一点感想"}],"action":{"name":"View Issue","url":"https://github.com/sorrycc/blog/issues/55#issuecomment-383309155"}}}

zhouyi318 avatar Apr 21 '18 17:04 zhouyi318

@lusess123 @zhouyi318 谢谢两位! 另外想问下roadhog有释放配置的命令吗?好像没找到类似eject的命令。

jiangzm avatar Apr 22 '18 16:04 jiangzm

我想要自定义 webpack 配置应该如何操作,比如我想加上 stylelint,我通过 webpack.config.js 的方式没有成功,如下: webpack.config.js

const StyleLintPlugin = require('stylelint-webpack-plugin');
export default function (webpackConfig, env) {
  webpackConfig.plugins.push(new StyleLintPlugin());
  return webpackConfig;
}

这是我的目录结构 image

weijieblog avatar Apr 22 '18 19:04 weijieblog

webpack配置文件需要这样写xmodule.exports=(webpackconfig.env)[ 这里写你的配置[追加到webpackconfig] return webpackcondig]发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:WeiJie 收件人:sorrycc/blog 抄送:zhouyi [email protected],Mention 我想要自定义 webpack 配置应该如何操作,比如我想加上 stylelint,我通过 webpack.config.js 的方式没有成功,如下: webpack.config.js const StyleLintPlugin = require('stylelint-webpack-plugin'); export default function (webpackConfig, env) { webpackConfig.plugins.push(new StyleLintPlugin()); return webpackConfig; } 这是我的目录结构

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/sorrycc/blog"}},"updates":{"snippets":[{"icon":"PERSON","message":"@WeiJieGitHub in #55: 我想要自定义 webpack 配置应该如何操作,比如我想加上 stylelint,我通过 webpack.config.js 的方式没有成功,如下:\r\nwebpack.config.js\r\n javascript\r\nconst StyleLintPlugin = require('stylelint-webpack-plugin');\r\nexport default function (webpackConfig, env) {\r\n webpackConfig.plugins.push(new StyleLintPlugin());\r\n return webpackConfig;\r\n}\r\n\r\n这是我的目录结构\r\nimage\r\n"}],"action":{"name":"View Issue","url":"https://github.com/sorrycc/blog/issues/55#issuecomment-383404976"}}}

zhouyi318 avatar Apr 23 '18 01:04 zhouyi318

升级2.0后,路由路径设置为二级【http://localhost:8000/goods/basic】,访问会报错, 路由改为一级【http://localhost:8000/basic】是访问正常的,这是为什么?

xiangweijun avatar Apr 23 '18 02:04 xiangweijun

jzo4 v xk 5 mo0j k67 fqr 6d91dskz_cvwt w d 这样手动删除了babel-plugin-transform-runtime,他会报错不存在这个依赖;怎么解决了?

sweet-smail avatar May 04 '18 02:05 sweet-smail

如果你有用 babel-polyfill,更换为 @babel/polyfill如果有 babel-runtime 依赖和配置了 babel-plugin-transform-runtime 插件,需删除,因为已内置处理,否则可能会报 this.setDynamic is not a function 的错误由于 babel@7 无法使用 babel-plugin-add-module-exports,所有的 require('./file') 需改为 require('./file').default如果有用 babel-plugin-dva-hmr,请升级到 0.4.x,发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:Pecking 收件人:sorrycc/blog 抄送:zhouyi [email protected],Mention

这样手动删除了babel-plugin-transform-runtime,他会报错不存在这个依赖;怎么解决了?

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/sorrycc/blog"}},"updates":{"snippets":[{"icon":"PERSON","message":"@Pecking in #55: jzo4 v xk 5 mo0j k67\r\nfqr 6d91dskz_cvwt w d\r\n这样手动删除了babel-plugin-transform-runtime,他会报错不存在这个依赖;怎么解决了?"}],"action":{"name":"View Issue","url":"https://github.com/sorrycc/blog/issues/55#issuecomment-386492308"}}}

zhouyi318 avatar May 04 '18 03:05 zhouyi318

@zhouyi318 我没用babel-polyfill,但是我用了babel-runtime ,如果我删除 babel-plugin-transform-runtime 这个依赖,启动得时候会报错不存在这个依赖,怎么解决了

sweet-smail avatar May 04 '18 03:05 sweet-smail

webpack配置删除runtime,因为2.0已经内置发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:Pecking 收件人:sorrycc/blog 抄送:zhouyi [email protected],Mention @zhouyi318 我没用babel-polyfill,但是我用了babel-runtime ,如果我删除 babel-plugin-transform-runtime 这个依赖,启动得时候会报错不存在这个依赖,怎么解决了

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/sorrycc/blog"}},"updates":{"snippets":[{"icon":"PERSON","message":"@Pecking in #55: @zhouyi318 我没用babel-polyfill,但是我用了babel-runtime ,如果我删除 babel-plugin-transform-runtime 这个依赖,启动得时候会报错不存在这个依赖,怎么解决了"}],"action":{"name":"View Issue","url":"https://github.com/sorrycc/blog/issues/55#issuecomment-386495977"}}}

zhouyi318 avatar May 04 '18 04:05 zhouyi318

env: { development: { extraBabelPlugins: ["dva-hmr"] } },发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:Pecking 收件人:sorrycc/blog 抄送:zhouyi [email protected],Mention @zhouyi318 我没用babel-polyfill,但是我用了babel-runtime ,如果我删除 babel-plugin-transform-runtime 这个依赖,启动得时候会报错不存在这个依赖,怎么解决了

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/sorrycc/blog"}},"updates":{"snippets":[{"icon":"PERSON","message":"@Pecking in #55: @zhouyi318 我没用babel-polyfill,但是我用了babel-runtime ,如果我删除 babel-plugin-transform-runtime 这个依赖,启动得时候会报错不存在这个依赖,怎么解决了"}],"action":{"name":"View Issue","url":"https://github.com/sorrycc/blog/issues/55#issuecomment-386495977"}}}

zhouyi318 avatar May 04 '18 04:05 zhouyi318

我在webpackrc里面配置了transform-decorators-legacy之后每个页面配置的就那不到了, 20180507122257

但是删掉transform-decorators-legacy的配置就好了,这是为什么

minlx avatar May 07 '18 04:05 minlx

@sorrycc HI,我从atool-build+dora 切换到[email protected]npm start的时候,babel报错,看起来像是不支持CommonJS和ES Module混用,但是没有提示具体代码,我也没找到解决的办法。。

image

---2018.05.09 Updated---

已解决,由于roadhog内置的babel7,需要对babel-plugin-import进行升级 (Modular import plugin for babel, compatible with antd, antd-mobile, and so on.)

Otobelikethee avatar May 09 '18 02:05 Otobelikethee

发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:Jiaxing Hu 收件人:sorrycc/blog 抄送:zhouyi [email protected],Mention @sorrycc HI,我从atool-build+dora 切换到[email protected],npm start的时候,babel报错,看起来像是不支持CommonJS和ES Module混用,但是没有提示具体代码,我也没找到解决的办法。。

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/sorrycc/blog"}},"updates":{"snippets":[{"icon":"PERSON","message":"@Otobelikethee in #55: @sorrycc HI,我从atool-build+dora 切换到[email protected]npm start的时候,babel报错,看起来像是不支持CommonJS和ES Module混用,但是没有提示具体代码,我也没找到解决的办法。。\r\n\r\nimage\r\n"}],"action":{"name":"View Issue","url":"https://github.com/sorrycc/blog/issues/55#issuecomment-387604178"}}} {"@type":"MessageCard","@context":"http://schema.org/extensions","hideOriginalBody":"false","originator":"37567f93-e2a7-4e2a-ad37-a9160fc62647","title":"Re: [sorrycc/blog] roadhog 2.0 发布 (#55)","sections":[{"text":"","activityTitle":"Jiaxing Hu","activityImage":"https://avatars1.githubusercontent.com/u/12393817?s=160\u0026v=4","activitySubtitle":"@Otobelikethee","facts":[]}],"potentialAction":[{"name":"Add a comment","@type":"ActionCard","inputs":[{"isMultiLine":true,"@type":"TextInput","id":"IssueComment","isRequired":false}],"actions":[{"name":"Comment","@type":"HttpPOST","target":"https://api.github.com","body":"{"commandName":"IssueComment","repositoryFullName":"sorrycc/blog","issueId":55,"IssueComment":"{{IssueComment.value}}"}"}]},{"name":"Close issue","@type":"HttpPOST","target":"https://api.github.com","body":"{"commandName":"IssueClose","repositoryFullName":"sorrycc/blog","issueId":55}"},{"targets":[{"os":"default","uri":"https://github.com/sorrycc/blog/issues/55#issuecomment-387604178"}],"@type":"OpenUri","name":"View on GitHub"},{"name":"Unsubscribe","@type":"HttpPOST","target":"https://api.github.com","body":"{"commandName":"MuteNotification","threadId":289505413}"}],"themeColor":"26292E"}

zhouyi318 avatar May 09 '18 03:05 zhouyi318

请问下没有了library,如果使用roadhog打包dva模块给被人用,如何配置roadhog代替library ?

qhy90223 avatar May 09 '18 03:05 qhy90223

不知道为什么,打包后的在ie里面显示不出来,包括ie11,空白的什么都没有,

tim 就报了个这个错,这是什么情况呢?

feitingjun avatar May 14 '18 09:05 feitingjun

部署到服务器和一样的问题

feitingjun avatar May 14 '18 09:05 feitingjun

@feitingjun 出错信息见 https://reactjs.org/docs/error-decoder.html?invariant=143 ,不压缩跑跑看。

sorrycc avatar May 14 '18 09:05 sorrycc

在开发环境跑是没有问题的,也没有警告,不用dva直接在入口index.js文件中写ReactDom都出不来,而且在其他浏览器也是没有问题的

feitingjun avatar May 14 '18 09:05 feitingjun

roadhog升级至2.4.1后,配置文件webpackrc里,env下的production配置为什么不起作用了吗, env: { production: { outputPath: path.join(__dirname, dist/1.0.0), } } 为什么正式环境打包后,输出目录是dist,而不是dist/1.0.0 @sorrycc

xiangweijun avatar May 21 '18 08:05 xiangweijun

你升级到最新版本就可以了。

xieyunjie avatar May 29 '18 09:05 xieyunjie

那个commons的配置可不可以写的更清楚一些呢,比如我想把moment库提出来

dsmelon avatar Jun 04 '18 08:06 dsmelon

roadhog 建构完的包很大,怎样使用tree-shaking

99874405 avatar Jun 08 '18 03:06 99874405

"dllPlugin (学习成本太高,并且有其他方法可以提升 dev server 启动速度)", 这里的其他方法,还请给一些指导,谢谢!

big-tutu avatar Jun 26 '18 02:06 big-tutu

不能打包多页面入口文件吗?这样配置build之后只有一个html文件,下面html,也不能配置两个.ejs文件,需要打包出两个html文件,怎么搞? image

SherryJiang1130 avatar Jul 07 '18 08:07 SherryJiang1130

@sorrycc 您好,我刚接触这个,不是太懂,想请教您一下:我想使用antd-theme-webpack-plugin插件来修改主题,但不知道该怎么配置,文档里给的使用方法如下: `const themePlugin = new AntDesignThemePlugin(options); // in config object plugins: [ themePlugin ]

Add this plugin in `plugins` array.`
但我的.webpackrc.js配置文件里没有plugins,内容如下:
`export default {
  entry: 'src/index.js',
  extraBabelPlugins: [
    "@babel/plugin-transform-runtime",
    ['import', { libraryName: 'antd', libraryDirectory: 'es', style: true }],
  ],
  env: {
    development: {
      extraBabelPlugins: ['dva-hmr'],
    }
  },

  externals: {
    '@antv/data-set': 'DataSet',
    rollbar: 'rollbar',
  },
  alias: {
    components: path.resolve(__dirname, 'src/components/'),
  },
  ignoreMomentLocale: true,
  theme: './src/theme.js',
  html: {
    template: './src/index.ejs',
  },
  lessLoaderOptions: {
    javascriptEnabled: true,
  },
  disableDynamicImport: true,
  disableCSSModules:false,
  publicPath: '/',
  hash: true,
};`
请问themePlugin该放在哪个里面?

capaten avatar Aug 10 '18 05:08 capaten

在index.js中引用了sass文件 import './css/index.scss'; 用的html模板index.ejs 编译之后看到html多出一个style标签,里面存的都是我的sass文件内容而没有编译过 我的配置如下: { "entry": "./src/index.js", "define": { "process.env.NODE_ENV": "development" }, "html": { "template": "./src/index.template.ejs" }, "disableCSSModules": true } 我配置中加上sass也没用,配置如下: { "entry": "./src/index.js", "define": { "process.env.NODE_ENV": "development" }, "html": { "template": "./src/index.template.ejs" }, "disableCSSModules": true, "sass": { "file": "./src/css/index.scss" } }

micheal-zhibin avatar Aug 23 '18 11:08 micheal-zhibin

如果你有用 babel-polyfill,更换为 @babel/polyfill如果有 babel-runtime 依赖和配置了 babel-plugin-transform-runtime 插件,需删除,因为已内置处理,否则可能会报 this.setDynamic is not a function 的错误由于 babel@7 无法使用 babel-plugin-add-module-exports,所有的 require('./file') 需改为 require('./file').default如果有用 babel-plugin-dva-hmr,请升级到 0.4.x,发自我的华为手机-------- 原始邮件 --------主题:Re: [sorrycc/blog] roadhog 2.0 发布 (#55)发件人:Pecking 收件人:sorrycc/blog 抄送:zhouyi [email protected],Mention 这样手动删除了babel-plugin-transform-runtime,他会报错不存在这个依赖;怎么解决了? —You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread. {"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/sorrycc/blog","title":"sorrycc/blog","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"[https://github.com/sorrycc/blog"}},"updates":{"snippets":{"icon":"PERSON","message":"@Pecking in #55: jzo4 v xk 5 mo0j k67\r\nfqr%5Cr%5Cn!%5Bfqr) 6d91dskz_cvwt w d]([https://user-images.githubusercontent.com/27414779/39610962-7511ab90-4f86-11e8-8e44-db64e50cd849.png)\r\n这样手动删除了babel-plugin-transform-runtime,他会报错不存在这个依赖;怎么解决了?"}],"action":{"name":"View](https://user-images.githubusercontent.com/27414779/39610962-7511ab90-4f86-11e8-8e44-db64e50cd849.png)%5Cr%5Cn%E8%BF%99%E6%A0%B7%E6%89%8B%E5%8A%A8%E5%88%A0%E9%99%A4%E4%BA%86babel-plugin-transform-runtime,%E4%BB%96%E4%BC%9A%E6%8A%A5%E9%94%99%E4%B8%8D%E5%AD%98%E5%9C%A8%E8%BF%99%E4%B8%AA%E4%BE%9D%E8%B5%96;%E6%80%8E%E4%B9%88%E8%A7%A3%E5%86%B3%E4%BA%86%EF%BC%9F%22%7D%5D,%22action%22:%7B%22name%22:%22View) Issue","url":"#55 (comment)"}}}

按你说的做了还是报了this.setDynamic is not a function的错,根本就没有解决

xu-Aurora avatar Sep 12 '18 07:09 xu-Aurora

roadhog 建构完的包很大,怎样使用tree-shaking

roadhog2.0这个版本支持webpack-deep-scope-plugin?

pengshaosu avatar Oct 16 '18 05:10 pengshaosu

"build": "cross-env NODE_ENV=prd roadhog build"这个命令在文件中判断环境 process.env.NODE_ENV的值怎么不是prd

gggdandan avatar Oct 26 '18 14:10 gggdandan