mirror of
https://github.com/zhigang1992/customize-cra.git
synced 2026-01-12 08:54:20 +08:00
new api for 0.1.0
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
node_modules/
|
||||
33
index.js
33
index.js
@@ -1,4 +1,7 @@
|
||||
function addBundleVisualizer(config) {
|
||||
const curry = require("lodash.curry");
|
||||
const flow = require("lodash.flow");
|
||||
|
||||
const addBundleVisualizer = () => config => {
|
||||
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
|
||||
|
||||
config.plugins.push(
|
||||
@@ -8,9 +11,9 @@ function addBundleVisualizer(config) {
|
||||
})
|
||||
);
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
function addBabelPlugin(plugin, config, env) {
|
||||
const addBabelPlugin = plugin => config => {
|
||||
let rulesWithBabel = config.module.rules.filter(
|
||||
r => r.oneOf && r.oneOf.some(r => Array.isArray(r.use) && r.use.some(u => u.options && u.options.babelrc != void 0))
|
||||
);
|
||||
@@ -27,22 +30,19 @@ function addBabelPlugin(plugin, config, env) {
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
function addDecoratorsLegacy(config, env) {
|
||||
addBabelPlugin(["@babel/plugin-proposal-decorators", { legacy: true }], config, env);
|
||||
return config;
|
||||
}
|
||||
const addDecoratorsLegacy = () => config => addBabelPlugin(["@babel/plugin-proposal-decorators", { legacy: true }])(config);
|
||||
|
||||
function disableEsLint(config, env) {
|
||||
const disableEsLint = () => config => {
|
||||
let eslintRules = config.module.rules.filter(r => r.use && r.use.some(u => u.options && u.options.useEslintrc != void 0));
|
||||
eslintRules.forEach(rule => {
|
||||
config.module.rules = config.module.rules.filter(r => r !== rule);
|
||||
});
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
function addWebpackAlias(alias, config) {
|
||||
const addWebpackAlias = alias => config => {
|
||||
if (!config.resolve) {
|
||||
config.resolve = {};
|
||||
}
|
||||
@@ -51,9 +51,18 @@ function addWebpackAlias(alias, config) {
|
||||
}
|
||||
Object.assign(config.resolve.alias, alias);
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
const override = (...pipeline) => (config, env) =>
|
||||
flow(
|
||||
...pipeline.map(f => {
|
||||
const curried = curry(f, 2);
|
||||
return curried(curry.placeholder, env);
|
||||
})
|
||||
)(config);
|
||||
|
||||
module.exports = {
|
||||
override,
|
||||
addBundleVisualizer,
|
||||
addBabelPlugin,
|
||||
addDecoratorsLegacy,
|
||||
|
||||
18
package-lock.json
generated
Normal file
18
package-lock.json
generated
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "customize-cra",
|
||||
"version": "0.0.6",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"lodash.curry": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz",
|
||||
"integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA="
|
||||
},
|
||||
"lodash.flow": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz",
|
||||
"integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o="
|
||||
}
|
||||
}
|
||||
}
|
||||
10
package.json
10
package.json
@@ -1,11 +1,15 @@
|
||||
{
|
||||
"name": "customize-cra",
|
||||
"version": "0.0.6",
|
||||
"version": "0.1.0-beta3",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
"author": "Adam Rackis",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lodash.curry": "^4.1.1",
|
||||
"lodash.flow": "^3.5.0"
|
||||
}
|
||||
}
|
||||
|
||||
39
readme.md
39
readme.md
@@ -4,7 +4,7 @@ This project piggybacks on [`react-app-rewired`](https://github.com/timarney/rea
|
||||
|
||||
To start, this project will export methods I need for what I'm using CRA for, but PRs will of course be welcome.
|
||||
|
||||
The functions documented below can be imported by name, and used in your config-overrides.js file, ie
|
||||
The functions documented below can be imported by name, and used in your `config-overrides.js` file, as explained below.
|
||||
|
||||
```js
|
||||
const { addDecoratorsLegacy } = require("customize-cra");
|
||||
@@ -17,39 +17,46 @@ const { addDecoratorsLegacy } = require("customize-cra");
|
||||
|
||||
Using this library will override default behavior and configuration of create-react-app, and therefore invalidate the guarentees that come with it. Use with discretion!
|
||||
|
||||
## Docs
|
||||
## Available plugins
|
||||
|
||||
### addBabelPlugin(plugin, config)
|
||||
### addBabelPlugin(plugin)
|
||||
|
||||
Adds a babel plugin. Not sure what else to say here.
|
||||
|
||||
### addDecoratorsLegacy(config)
|
||||
### addDecoratorsLegacy()
|
||||
|
||||
Add decorators in legacy mode. Be sure to have `@babel/plugin-proposal-decorators` installed.
|
||||
|
||||
### disableEsLint(config)
|
||||
### disableEsLint()
|
||||
|
||||
Does what it says. You may need this along with `addDecoratorsLegacy` in order to get decorators and exports to parse together.
|
||||
|
||||
### addWebpackAlias(alias, config)
|
||||
### addWebpackAlias(alias)
|
||||
|
||||
Adds the provided alias info into webpack's alias section. Pass an object literal with as many entries as you'd like, and the whole object will be merged in.
|
||||
|
||||
### addBundleVisualizer(config)
|
||||
### addBundleVisualizer()
|
||||
|
||||
Adds the bundle visualizer plugin to your webpack config. Be sure to have `webpack-bundle-analyzer` installed.
|
||||
|
||||
## MobX Users
|
||||
## Using the plugins
|
||||
|
||||
If you want CRA 2 to work with MobX, this should get you going.
|
||||
To use these plugins, import the `override` function, and call it with whatever plugins you need. Each of these plugin invocations will return a new function, that `override` will call with the newly modified config object. This means that if you need to conditionally apply any of these plugins, just provide a lambda that receives the config object, and conditionally invoke a plugin as needed, being sure to call it twice.
|
||||
|
||||
For example
|
||||
|
||||
```js
|
||||
const { addDecoratorsLegacy, disableEsLint } = require("customize-cra");
|
||||
const { override, addDecoratorsLegacy, disableEsLint, addBundleVisualizer, addWebpackAlias } = require("customize-cra");
|
||||
const path = require("path");
|
||||
|
||||
module.exports = function override(config) {
|
||||
addDecoratorsLegacy(config);
|
||||
disableEsLint(config);
|
||||
|
||||
return config;
|
||||
};
|
||||
module.exports = override(
|
||||
addDecoratorsLegacy(),
|
||||
disableEsLint(),
|
||||
config => (process.env.BUNDLE_VISUALIZE == 1 ? addBundleVisualizer()(config) : config),
|
||||
addWebpackAlias({ ["ag-grid-react$"]: path.resolve(__dirname, "src/shared/agGridWrapper.js") })
|
||||
);
|
||||
```
|
||||
|
||||
## MobX Users
|
||||
|
||||
If you want CRA 2 to work with MobX, use the `addDecoratorsLegacy` and `disableEsLint`.
|
||||
|
||||
Reference in New Issue
Block a user