UNPKG

react-app-rewired-single-spa

Version:
161 lines (115 loc) 4.13 kB
# react-app-rewired-single-spa Use `single-spa` `systemjs` in your `create-react-app`. [npm]: https://img.shields.io/npm/v/react-app-rewired-single-spa [npm-url]: https://www.npmjs.com/package/react-app-rewired-single-spa [download]: http://img.shields.io/npm/dm/react-app-rewired-single-spa.svg?style=flat [![npm][npm]][npm-url] [![NPM downloads][download]][npm-url] > Quickly adapt `react-scripts` as a submodule of single-spa !!! > Support `react-scripts@4.x` `react-scripts@5.x` version. ## Features - Support `react-scripts@5.x` compatible with common configuration migrations - Output `systemjs` library auto add `SystemJSPublicPathPlugin` - Support `ReactFastRefresh` hot refresh ## Installation ```bash npm i react-app-rewired-single-spa -D ``` ## Usage This project is based on [`react-app-rewired`](https://github.com/timarney/react-app-rewired). ```js /* config-overrides.js */ const { rewiredSingleSpa, rewiredSingleSpaDevServer, } = require("react-app-rewired-single-spa"); module.exports = { webpack: rewiredSingleSpa(), devServer: function (configFunction) { return function (proxy, allowedHost) { const config = configFunction(proxy, allowedHost); return rewiredSingleSpaDevServer()(config); }; }, }; // use `customize-cra` const { override, overrideDevServer } = require("customize-cra"); module.exports = { webpack: override( rewiredSingleSpa({ orgName: "you", projectName: "test", reactPackagesAsExternal: true, peerDepsAsExternal: true, orgPackagesAsExternal: true, }) ), devServer: overrideDevServer(rewiredSingleSpaDevServer()), }; ``` ## Options ### orgName Type: `string` The name of the organization this application is written for. ### projectName Type: `string` The name of the current project. This usually matches the git repo's name. ### entry Type: `string` Default: `src/{orgName}-{projectName}.{js|jsx|ts|tsx}` `src/index.{js|jsx|ts|tsx}` The entry file. ### outputFilename Type: `string` Default: - development `{orgName}-{projectName}.[contenthash:8].js` - production `{orgName}-{projectName}.js` ### rootDirectoryLevel Type: `number` This is the rootDirectoryLevel that is passed to https://github.com/joeldenning/systemjs-webpack-interop. ### reactPackagesAsExternal Type: `boolean` This will `react` `react-dom` as webpack externals or not. ### orgPackagesAsExternal Type: `boolean` This changes whether package names that start with @your-org-name are treated as webpack externals or not. ### peerDepsAsExternal Type: `boolean` This will package.json `peerDependencies` as webpack externals or not. ## FQA ### FastRefresh invalid - If `react` `react-dom` is external, `react-dev-tool` must be installed to refresh automatically. For details, please see https://github.com/facebook/react/issues/17552 - Check whether the ws connection is normal, you can set in `.env` file - `WDS_SOCKET_PORT` "2002" - `WDS_SOCKET_HOST` "localhost" - `WDS_SOCKET_PATH` "/projectName" **Please start with "/"** > The default hotreload client uses the relative website protocol, > which is the protocol of the main base. It can use the localhost > protocol and the local development port. ### webpack < 5 used to include polyfills for node.js core modules by default The following packages have been integrated by default, and the specified dependencies can be installed directly in the project. ```json { "url": "url", "fs": "fs", "assert": "assert", "crypto": "crypto-browserify", "http": "stream-http", "https": "https-browserify", "os": "os-browserify/browser", "buffer": "buffer", "stream": "stream-browserify" } ``` ### You attempted to import XXXXXXXX which falls outside of the project src/ directory You can use `customize-cra` `removeModuleScopePlugin()` ### react-scripts@5.x postcss plugin error You can use `customize-cra` ```js adjustStyleLoaders(({ use: [, , postcss] }) => { const postcssOptions = postcss.options; postcss.options = { postcssOptions }; }); ``` ## License MIT © [fupengl](https://github.com/fupengl)