今回は、マルチページをサポートするために create-react-app を変更する方法と、マルチページをサポートするために create-react-app を変更する際の 注意点 について説明します。これは実際的なケースです。見て。
開発プロセスを変更します
create-react-appyarn run eject
によって生成されたプロジェクトに基づいていますyarn run eject
yarn add globby
用于查看html文件
修改config/paths.js
//遍历public下目录下的html文件生成arry const globby = require('globby'); const htmlArray = globby.sync([path.join(resolveApp('public'), '/*.html')]); //module.exports 里面增加 htmlArray
修改config/webpack.config.dev.js
<!--增加配置--> // 遍历html const entryObj = {}; const htmlPluginsAray = paths.htmlArray.map((v)=> { const fileParse = path.parse(v); entryObj[fileParse.name] = [ require.resolve('./polyfills'), require.resolve('react-dev-utils/webpackHotDevClient'), `${paths.appSrc}/${fileParse.name}.js`,, ] return new HtmlWebpackPlugin({ inject: true, chunks:[fileParse.name], template: `${paths.appPublic}/${fileParse.base}`, filename: fileParse.base }) }); <!--entry 替换为entryObj--> entry:entryObj <!--替换htmlplugin内容--> // new HtmlWebpackPlugin({ // inject: true, // chunks: ["index"], // template: paths.appPublic + '/index.html', // }), ...htmlPluginsAray,
修改config/webpackDevServer.config.js
// 增加 const path = require('path'); const htmlPluginsAray = paths.htmlArray.map((v)=> { const fileParse = path.parse(v); return { from: new RegExp(`^\/${fileParse.base}`), to: `/build/${fileParse.base}` }; }); <!--historyApiFallback 增加 rewrites--> rewrites: htmlPluginsAray
以上就是dev模式下的修改了,yarn start一下试试。
修改product流程
修改config/
//增加 // 遍历html const entryObj = {}; const htmlPluginsAray = paths.htmlArray.map((v)=> { const fileParse = path.parse(v); entryObj[fileParse.name] = [ require.resolve('./polyfills'), `${paths.appSrc}/${fileParse.name}.js`, ]; console.log(v); return new HtmlWebpackPlugin({ inject: true, chunks:[fileParse.name], template: `${paths.appPublic}/${fileParse.base}`, filename: fileParse.base }) }); <!--修改entry--> entry: entryObj, <!--替换 new HtmlWebpackPlugin 这个值--> ...htmlPluginsAray,
增加复制模块(yarn add cpy
)
修改scripts/build.js
// function copyPublicFolder () 替换 // 原来的方法是复制public下所有的内容,因为增加了多html 所以不再直接复制过去(直接复制会覆盖html) const copyPublicFolder = async() => { await cpy([`${paths.appPublic}/*.*`, `!${paths.appPublic}/*.html`], paths.appBuild); console.log('copy success!'); // fs.copySync(paths.appPublic, paths.appBuild, { // dereference: true, // filter: file => file !== paths.appHtml, // }); }
以上修改后测试下yarn build
yarn add globby
を使用して表示しますhtml ファイル
config/paths.js を変更する
// 增加模块 yarn add node-sass-chokidar npm-run-all // package.json删除配置 "start": "node scripts/start.js", "build": "node scripts/build.js", // package.json里面增加scripts "build-css": "node-sass-chokidar src/scss -o src/css", "watch-css": "npm run build-css && node-sass-chokidar src/scss -o src/css --watch --recursive", "start-js": "node scripts/start.js", "start": "npm-run-all -p watch-css start-js", "build-js": "node scripts/build.js", "build": "npm-run-all build-css build-js",
config/webpack.config.dev.js を変更するyarn add html-loader
<!--index.html-->
<%= require('html-loader!./partials/header.html') %>
<img src="<%= require('../src/imgs/phone.png') %>" alt="">
上記は開発モードでの変更です。yarn start を試してください。
プロダクトプロセスを変更するconfig/
rrreeeを変更するコピーモジュールを追加する(yarn add cpy
)
scripts/build.jsを変更する
rrreee上記の変更後にyarnをテストするbuild
対応するHTMLの生成が正しいか確認してください、正常です。
追加機能
sassサポート (create-react-appのドキュメントを参照してください。"start": "react-scripts start"、"build": "react-scripts build"を直接コピーしないように注意してください) , 以前にyarn ejectがあるので、この方法で使用すると問題があります。自分で試してみてください)
以上が複数のページをサポートするように create-react-app を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。