Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

roadhog

NPM versionBuild StatusNPM downloadsDependencies

查看中文版

Roadhog is a cli tool with devbuild and test commands. It's based on react-dev-utils and is consistent with the experience of create-react-app. You can imagine this is a configurable version of create-react-app.

Docs

Features

  • 📦 out of the box React application development tools, built-in css-modules, babel, postcss, HMR, etc.
  • 🐠 create-react-app experience
  • 🚨 webpack configuration in JSON format
  • 🔥 mock
  • ✂️ test based on jest, ui test with enzyme

Getting started

## Install globally or locally
$ npm i roadhog -g
## Check version
$ roadhog -v
2.0.0
## Local development
$ roadhog dev
## Build
$ roadhog build
$ NO_COMPRESS=1 roadhog build
## Test
$ roadhog test

Mock

roadhog dev support mock, configured in .roadhogrc.mock.js.

e.g.

exportdefault{// Support type as Object and Array'GET /api/users': {users: [1,2]},// Method like GET or POST can be omitted'/api/users/1': {id: 1},// Support for custom functions, the API is the same as express@4'POST /api/users/create': (req,res)=>{res.end('OK');},};

Use the public directory

Files in the public directory would be copied to the output directory (by default ./dist) on the dev and build. So favicon, iconfont, html, html quoted pictures could be stored here.

Configuration

roadhog's webpack part is based on the af-webpack's implementation. For configuration, create .webpackrc in the project root. The format is JSON, e.g.

{"externals": {"react": "window.React"}}

If you prefer JS configuration, or need to do some programming or abstract judgment, you can use .webpackrc.js configuration file, support ES6 syntax, e.g.

exportdefault{externals: {react: 'window.React'},}

Index:

entry

Specify webpack entries, support glob format.

suppose your project is multipages, wanting files in src/pages as entries. your can do the followings.

"entry": "src/pages/*.js"

theme

Configure the theme, in fact, with less variables. Support both object and string type, the string needs to point to a file which return configurations.

e.g.

"theme": {
"@primary-color": "#1DA57A"
}

or,

"theme": "./theme-config.js"

define

Pass to code through the webpack's DefinePlugin plugin, the value will automatically be processed with JSON.stringify.

e.g.

"define": {"process.env.TEST": 1,"USE_COMMA": 2,}

externals

Configure webpack's [externals] (https://webpack.js.org/configuration/externals/) property.

e.g.

// Don't pack react and react-dom"externals": {"react": "window.React","react-dom": "window.ReactDOM"}

alias

Configure webpack's resolve.alias property.

extraResolveExtensions

Configure webpack's resolve.extensions property.

browserslist

Configure browserslist, works on both babel-preset-env and autoprefixer.

e.g.

"browserslist": ["> 1%","last 2 versions"]

publicPath

Configure webpack's output.publicPath property.

outputPath

Configure webpack's output.path property.

devtool

Configure webpack's devtool property.

commons

Configure webpack's CommonsChunkPlugin plugin, the format is Array.

e.g.

"commons": [
{
async: '__common',
children: true,
minChunks(module, count) {
if (pageCount <= 2) {
return count >= pageCount;
}
return count >= pageCount * 0.5;
},
},
]

hash

Configuration to build with hash file name, and it's usually used in conjunction with the manifest.

html

Configure html-webpack-plugin plugin.

e.g.

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

disableCSSModules

Disable CSS Modules,we do not recommend doing this.

disableCSSSourceMap

Disable generate CSS's SourceMap.

extraBabelPresets

Define an additional list of babel presets, the formatt is Array.

extraBabelPlugins

Define an additional list of babel plugins, the formatt is Array.

extraBabelIncludes

Define an additional list of file matches that need to be transformed with babel, the format is Array.

copy

Define a list of files that need to be copied. The format is an array, and the format of the item refers to the configuration of [copy-webpack-plugin] (https://github.com/webpack-contrib/copy-webpack-plugin).

e.g.

"copy": [
{
"from": "",
"to": ""
}
]

proxy

Configure the [proxy] (https://webpack.js.org/configuration/dev-server/#devserver-proxy) property of webpack-dev-server.

e.g. proxy requests to other servers,

"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}

Then visit / api / users to access the data from [http://jsonplaceholder.typicode.com/users](http://jsonplaceholder.typicode.com/users].

sass

Configure the options for [node-sass] (https://github.com/sass/node-sass#options). Note: node-sass and sass-loader dependencies must be installed in the project directory when using sass.

manifest

Configure to generate manifest.json, it's option will pass to https://www.npmjs.com/package/webpack-manifest-plugin.

e.g.

"manifest": {
"basePath": "/app/"
}

ignoreMomentLocale

Ignore moment locale file, used to reduce the size.

disableDynamicImport

Disable import () to load on demand, but bundle all the files in a single file, implement via babel-plugin-dynamic-import-node-sync.

env

Set specific options for certain environment. development is for dev, and production is for build.

e.g.

"extraBabelPlugins": ["transform-runtime"],"env": {"development": {"extraBabelPlugins": ["dva-hmr"]}}

Thus, extraBabelPlugins in development is ['transform-runtime', 'dva-hmr'], and ['transform-runtime'] in production.

Environment Variables

You can temporarily configure some parameters for environment variables, including:

  • PORT, default 8000
  • HOST, default localhost
  • ANALYZE, whether to analyze the output bundle in roadhog build
  • ESLINT, set none disable eslint check
  • TSLINT, set none disable tslint check
  • COMPRESS, set none to disable file compressing in roadhog build
  • BROWSER, set none to disable browser open in roadhog dev

e.g. start dev server with port 3000,

# OS X, Linux
$ PORT=3000 roadhog dev
# Windows (cmd.exe)
$ set PORT=3000&&roadhog dev
# Or use cross-env for all platforms
$ cross-env PORT=3000 roadhog dev

FAQ

Why is it called roadhog ?

roadhog is a hero from overwatch, just like dva.

LICENSE

MIT

About

🐷 Cli tool for creating react apps, configurable version of create-react-app.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages