折腾:
期间,已经照葫芦画瓢,画了个login.html:

但是不知道,如何打包生成多个html。
react js webpack multiple html
react js webpack 多个html页面
Multiple entry points -> multiple html outputs? · Issue #218 · jantimon/html-webpack-plugin
jantimon/html-webpack-plugin: Simplifies creation of HTML files to serve your webpack bundles
Multiple modules for multiple entry points in webpack config for reactjs app – Stack Overflow
webpack 多页面构建 · Issue #11 · shaozj/blog
基于webpack的前端工程化开发之多页站点篇(一) – 歪闹日志 – SegmentFault
然后此处经过折腾,基本上满足需求了:
【总结】
react-hot-boilerplate/webpack.config.js

var HtmlWebpackPlugin = require(‘html-webpack-plugin’); let isProd = (process.env.NODE_ENV === ‘production’);   new HtmlWebpackPlugin({     template: ‘./src/index.template.ejs’,     filename: ‘index.html’,     chunks: [‘vendor’, ‘index’],     hash: true,     assetsPrefix: isProd ? ” : `http://localhost:${wdsListenPort}/`   }),   new HtmlWebpackPlugin({     template: ‘./src/login.template.ejs’,     filename: ‘login.html’,     hash: true,     chunks: [‘vendor’, ‘login’],     assetsPrefix: isProd ? ” : `http://localhost:${wdsListenPort}/`   }),     new CopyWebpackPlugin([       // { from: ‘./index.html’ },       // { from: ‘src/assets’, to: ‘dist’ },       { from: ‘src/assets’, to: ‘assets’ },     ]) module.exports = {   entry: {     login: ‘./src/login.entry.js’,     index: ‘./src/index.entry.js’,     vendor : [       ‘babel-polyfill’, // Set up an ES6-ish environment       ‘react-hot-loader/patch’,       ‘./src/lib/adminlte/adminlte_app.js’     ],   },   output: {     path: path.resolve(__dirname, ‘build’),     filename: ‘[name].js’,     publicPath: `/${curPublicPath}/`   },   devServer: {     // hot: true,     contentBase: path.resolve(__dirname, ‘build’),     publicPath: path.resolve(__dirname, `/${curPublicPath}/`),     // publicPath: path.resolve(__dirname, ‘/devServerPublicPath/’),     compress: true,     port: wdsListenPort,     historyApiFallback: true,     open: true,     openPage: `${curPublicPath}/`   }, …  | 
rse_web/package.json
  “scripts”: {     “dev”: “cross-env NODE_ENV=development webpack-dev-server –progress –colors –hot –inline”,     “lint”: “eslint src”,     “clean”: “rm -rf build/ build.zip”,     “package”: “zip -r build.zip build/”,     “prebuild”: “npm run clean”,     “build”: “cross-env NODE_ENV=production webpack -p –progress –colors”,     “postbuild”: “npm run package”   },  | 
rse_web/src/login.template.ejs
<!DOCTYPE html> <html> <head>   <meta charset=”utf-8″>   <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>   <title>xxx后台管理系统</title>   <!– Tell the browser to be responsive to screen width –>   <meta content=”width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no” name=”viewport”>   <!– Bootstrap 3.3.7 –>   <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/bootstrap/css/bootstrap.min.css”>   <!– Font Awesome –>   <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/font-awesome/css/font-awesome.css”>   <!– Ionicons –>   <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/css/ionicons/ionicons.min.css”>   <!– Theme style –>   <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/adminlte/AdminLTE.min.css”> </head> <body class=”hold-transition login-page”>   <div id=’login_root’>   </div>   <!– jQuery 3 –>   <script src=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/jquery/jquery-3.1.1.min.js”></script>   <!– Bootstrap 3.3.7 –>   <script src=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/bootstrap/js/bootstrap.min.js”></script>   <!– jQuery DateTables –>   <script src=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/datatables/jquery.dataTables.min.js”></script> </body> </html>  | 
index.template.ejs
<!DOCTYPE html> <html>   <head>     <% for (var chunk in htmlWebpackPlugin.files.css) { %>       <link rel=”preload” href=”<%= htmlWebpackPlugin.files.css[chunk] %>”  as=”style”>     <% } %>     <% for (var chunk in htmlWebpackPlugin.files.chunks) { %>       <link rel=”preload” href=”<%= htmlWebpackPlugin.files.chunks[chunk].entry %>” as=”script”>     <% } %>     <meta charset=”utf-8″>     <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>     <title>xxx后台管理系统</title>     <!– Tell the browser to be responsive to screen width –>     <meta content=”width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no” name=”viewport”>     <!– Bootstrap 3.3.7 –>     <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/bootstrap/css/bootstrap.min.css”>     <!– Font Awesome –>     <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/font-awesome/css/font-awesome.css”>     <!– Ionicons –>     <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/css/ionicons/ionicons.min.css”>     <!– DataTables –>     <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/datatables/dataTables.bootstrap.min.css”>     <!– Theme style –>     <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/adminlte/AdminLTE.min.css”>     <!– AdminLTE Skins. Choose a skin from the css/skins       folder instead of downloading all of them to reduce the load. –>     <link rel=”stylesheet” href=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/adminlte/_all-skins.min.css”>   </head>   <body class=”skin-blue sidebar-mini wysihtml5-supported”>     <div id=’app_root’>     </div>     <!– <script src=”https://code.jquery.com/jquery-3.1.1.min.js” integrity=”sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=” crossorigin=”anonymous”></script> –>     <script src=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/jquery/jquery-3.1.1.min.js”></script>     <script src=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/datatables/jquery.dataTables.min.js”></script>     <script src=”<%= htmlWebpackPlugin.options.assetsPrefix %>assets/lib/datatables/dataTables.bootstrap.min.js”></script>     <!– HtmlWebpackPlugin will generated code include index.js and vendor.bundle.js here –>   </body> </html>  | 
index.entry.js
import React from ‘react’; import ReactDOM from ‘react-dom’; import App from ‘./pages/main/App’; ReactDOM.render( <App />, document.getElementById(‘app_root’) );  | 
login.entry.js
import React from ‘react’; import ReactDOM from ‘react-dom’; import Login from ‘./pages/login/login’; ReactDOM.render( <Login />, document.getElementById(‘login_root’) );  | 
然后去:
npm run build
后,即可生成对应的
build/login.html
<!DOCTYPE html> <html> <head>   <meta charset=”utf-8″>   <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>   <title>xxx后台管理系统</title>   <!– Tell the browser to be responsive to screen width –>   <meta content=”width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no” name=”viewport”>   <!– Bootstrap 3.3.7 –>   <link rel=”stylesheet” href=”assets/lib/bootstrap/css/bootstrap.min.css”>   <!– Font Awesome –>   <link rel=”stylesheet” href=”assets/lib/font-awesome/css/font-awesome.css”>   <!– Ionicons –>   <link rel=”stylesheet” href=”assets/css/ionicons/ionicons.min.css”>   <!– Theme style –>   <link rel=”stylesheet” href=”assets/lib/adminlte/AdminLTE.min.css”> </head> <body class=”hold-transition login-page”>   <div id=’login_root’>   </div>   <!– jQuery 3 –>   <script src=”assets/lib/jquery/jquery-3.1.1.min.js”></script>   <!– Bootstrap 3.3.7 –>   <script src=”assets/lib/bootstrap/js/bootstrap.min.js”></script>   <!– jQuery DateTables –>   <script src=”assets/lib/datatables/jquery.dataTables.min.js”></script> <script type=”text/javascript” src=”/rse_web/vendor.bundle.js?bd2eb63c5ea7e1fa1876″></script><script type=”text/javascript” src=”/rse_web/login.js?bd2eb63c5ea7e1fa1876″></script></body> </html>  | 

build/index.html
<!DOCTYPE html> <html>   <head>       <link rel=”preload” href=”/rse_web/styles.css?bd2eb63c5ea7e1fa1876″  as=”style”>       <link rel=”preload” href=”/rse_web/vendor.bundle.js?bd2eb63c5ea7e1fa1876″ as=”script”>       <link rel=”preload” href=”/rse_web/index.js?bd2eb63c5ea7e1fa1876″ as=”script”>     <meta charset=”utf-8″>     <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>     <title>xxx后台管理系统</title>     <!– Tell the browser to be responsive to screen width –>     <meta content=”width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no” name=”viewport”>     <!– Bootstrap 3.3.7 –>     <link rel=”stylesheet” href=”assets/lib/bootstrap/css/bootstrap.min.css”>     <!– Font Awesome –>     <link rel=”stylesheet” href=”assets/lib/font-awesome/css/font-awesome.css”>     <!– Ionicons –>     <link rel=”stylesheet” href=”assets/css/ionicons/ionicons.min.css”>     <!– DataTables –>     <link rel=”stylesheet” href=”assets/lib/datatables/dataTables.bootstrap.min.css”>     <!– Theme style –>     <link rel=”stylesheet” href=”assets/lib/adminlte/AdminLTE.min.css”>     <!– AdminLTE Skins. Choose a skin from the css/skins       folder instead of downloading all of them to reduce the load. –>     <link rel=”stylesheet” href=”assets/lib/adminlte/_all-skins.min.css”>   <link href=”/rse_web/styles.css?bd2eb63c5ea7e1fa1876″ rel=”stylesheet”></head>   <body class=”skin-blue sidebar-mini wysihtml5-supported”>     <div id=’app_root’>     </div>     <!– <script src=”https://code.jquery.com/jquery-3.1.1.min.js” integrity=”sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=” crossorigin=”anonymous”></script> –>     <script src=”assets/lib/jquery/jquery-3.1.1.min.js”></script>     <script src=”assets/lib/datatables/jquery.dataTables.min.js”></script>     <script src=”assets/lib/datatables/dataTables.bootstrap.min.js”></script>     <!– HtmlWebpackPlugin will generated code include index.js and vendor.bundle.js here –>   <script type=”text/javascript” src=”/rse_web/vendor.bundle.js?bd2eb63c5ea7e1fa1876″></script><script type=”text/javascript” src=”/rse_web/index.js?bd2eb63c5ea7e1fa1876″></script></body> </html>  | 
