亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

react 應用多入口配置及實踐總結

2019-11-19 12:41:11
字體:
來源:轉載
供稿:網友

背景

還是之前的那個項目,做完國際化沒多久,還沒來得及劃水, 又有新的活了 -- 移動端的兼容。 考慮到后期的復雜度, 需要做兩套資源。 具體的目標是:同一個URL,PC打開就顯示PC的那一套, M端打開就顯示Mobile的頁面。 create-react-app 腳手架本身不支持多入口, 需要改造,今天下午研究了一下,改造了一波, 基本達到了預期, 在這里簡單把經驗總結分享下。

先睹為快

Mobile:

PC:

輸出之后的文件, 相比之前的index.html, 多了一個額外的mobile.html.

最終的源代碼目錄:

具體的改造步驟如下:

Steps

step1: Eject

在下之前圖方便, 直接用了create-react-app, 現在需要更改配置, 需要彈出默認配置:

在終端執行:yarn eject.

step2: 修改webpack config

原本的 webpack.config.dev.js:

entry: [ require.resolve('react-dev-utils/webpackHotDevClient'), require.resolve('./polyfills'), require.resolve('react-error-overlay'), paths.appIndexJs,],output: { path: paths.appBuild, pathinfo: true, filename: 'static/js/bundle.js', chunkFilename: 'static/js/[name].chunk.js', publicPath: publicPath, devtoolModuleFilenameTemplate: info =>  path.resolve(info.absoluteResourcePath),},

需要修改為:

entry: {  index: [   require.resolve('./polyfills'),   require.resolve('react-dev-utils/webpackHotDevClient'),   paths.appIndexJs,  ],  mobile: [   require.resolve('./polyfills'),   require.resolve('react-dev-utils/webpackHotDevClient'),   paths.appSrc + "/mobile/index.js",  ] }, output: {  pathinfo: true,  filename: 'static/js/[name].bundle.js',  chunkFilename: 'static/js/[name].chunk.js',  publicPath: publicPath,  devtoolModuleFilenameTemplate: info =>   path.resolve(info.absoluteResourcePath).replace(////g, '/'), },

可能需要注意的幾點:

  • entry從原來的數組擴展為對象,每個key代表一個入口。
  • output中的filename要區分輸出名,可增加[name]變量,這樣會根據entry分別編譯出每個entry的js文件。

這樣你就可以在src 目錄下新起一個民目錄開發新的SPA:

step3: 生成多個html入口文件

Webpack配置多入口后,只是編譯出多個入口的Js,入口的HTML文件也需要配置, 可以用HtmlWebpackPlugin來生成。

webpack.config.dev.js 原配置:

  // Generates an `index.html` file with the <script> injected.  new HtmlWebpackPlugin({   inject: true,   chunks: ["index"],   template: paths.appHtml,  }),

需要加多一個配置, 改成:

  // Generates an `index.html` file with the <script> injected.  new HtmlWebpackPlugin({   inject: true,   chunks: ["index"],   template: paths.appHtml,  }),  new HtmlWebpackPlugin({   inject: true,   chunks: ["mobile"],   template: paths.appHtml,   filename: 'mobile.html',  }),
  • 每調一次HtmlWebpackPlugin生成一次HTML頁面,這里有兩個,所以就會多增加一個mobile.html節點。
  • chunks: 指明哪些webpack入口的js會被注入到這個HTML頁面。如果不配置,則將所有entry的JS文件都注入HTML。
  • filename: 指明生成的HTML路徑,如果不配置就是dist/index.html。mobile配置了新的filename,避免與第一個入口相互覆蓋。
  • template: 指定模版, 我這里因為用的這兩個模版都一樣, 所以就指定的同一個appHtml, 如有特殊需求, 就新建一個html 文件, 在template字段里引用即可。

Step4: 配置webpack Dev Server

上述配置做完后,理論就可以打包出多入口的版本;但使用npm start啟動后,發現無論輸入/index.html還是/mobile.html,好像都是和原來/index.html顯示一樣的內容。

甚至輸入顯然不存在的/xxxx.html,也顯示為/index.html的內容。

這種現象,初步判斷是HTTP服務器把所有請求重定向到了/index.html。

對于單頁應用,這種做法是沒有問題的(本來就一個頁面), 但我們新增的/mobile.html就可以訪問到了。

參考官方文檔 The historyApiFallback option,發現是webpack dev server的問題,還要額外做一些配置,需修改webpackDevServer.config.js:

原配置:

historyApiFallback: { // Paths with dots should still use the history fallback. // See https://github.com/facebookincubator/create-react-app/issues/387. disableDotRule: true,},

修改為:

historyApiFallback: { // Paths with dots should still use the history fallback. // See https://github.com/facebookincubator/create-react-app/issues/387. disableDotRule: true, // 指明哪些路徑映射到哪個html rewrites: [  { from: /^//mobile.html/, to: '/dist/mobile.html' }, ]},

增加的rewrites節點,特別對/admin.html這個URL重定向為/dist/mobile.html頁面(也就是HtmlWebpackPlugin輸出的HTML文件路徑),這樣/mobile.html就可以正常訪問了。

至此,dev環境的多入口問題就解決了。

step5: Prod 環境配置

prod環境,比dev環境更簡單。由于不存在webpack Dev Server,直接在config/webpack.config.prod.js同理做2和3步驟即可。

這時候你就可以通過手動修改URl 來訪問了:

路由相關

到這, 已經可以手動修改URL 來訪問pc 和 mobile的頁面了。 還有一個問題沒有解決:

URL最后肯定是不能給你手動改來改去的, 需要根據設備的情況自己判斷, 這里有兩個思路:

1: 配置 Nginx 的路徑的時候, 加多一個alias 的映射。
2: 前端根據UA自行配置。

為了快速出效果, 簡單搞了一下, 具體代碼如下:

這樣, 不用手動修改URL 也能根據UA自動顯示不同的頁面了, 具體的效果圖在文章開頭的先睹為快中。

其他

上面的路由就為了簡單的出個效果, 比較粗暴, 僅供參考。

結語

以上就是全部的細節了, 達到了預期的效果, 但是也有很大優化空間。 等后面一波需求做完了, 再來做補充吧。希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚州欧美日韩中文视频| 色播久久人人爽人人爽人人片视av| 亚洲国产精品视频在线观看| 日韩网站免费观看高清| 丝袜亚洲另类欧美重口| 国产精品黄视频| 国产精品入口夜色视频大尺度| 国产精品视频男人的天堂| 91网站在线免费观看| 国产一区二区三区18| 亚洲男子天堂网| 色老头一区二区三区在线观看| 国产精品极品美女在线观看免费| 国产精品极品在线| 中文.日本.精品| 粗暴蹂躏中文一区二区三区| 亚洲欧美资源在线| 美日韩精品免费视频| 国产精品久久久久免费a∨| 久久久久久伊人| 日韩精品中文字| 亚洲区在线播放| 日韩有码在线视频| 91国产高清在线| 国产亚洲精品久久久久久| 亚洲欧美激情四射在线日| 久久av.com| 欧美激情视频播放| 一区二区三区四区视频| 成人午夜在线视频一区| 欧美一级视频免费在线观看| 日韩中文字幕精品| 欧美国产视频一区二区| 欧美乱人伦中文字幕在线| 久久亚洲精品毛片| 欧美激情视频网| 国产精品自产拍在线观看| 亚洲热线99精品视频| 久久99国产精品久久久久久久久| 日韩欧美综合在线视频| 亚洲成人av中文字幕| 国产一区二区三区视频在线观看| 日韩av片电影专区| 国产色视频一区| 精品magnet| 国产成人精品免费久久久久| 国产欧美日韩精品专区| 91香蕉嫩草神马影院在线观看| 韩国一区二区电影| 日韩国产欧美精品在线| 欧美在线不卡区| 国产精品第二页| 亚洲日韩第一页| 亚洲一区二区免费在线| 富二代精品短视频| 日韩专区中文字幕| 日韩美女主播视频| 成人欧美一区二区三区在线湿哒哒| 久久人人爽人人爽爽久久| 精品国产福利在线| 98午夜经典影视| 欧美国产日本在线| 欧美久久精品午夜青青大伊人| 国产99在线|中文| 91免费国产网站| 色偷偷亚洲男人天堂| 亚洲香蕉成视频在线观看| 国产精品69av| 欧洲日韩成人av| 91精品视频大全| 亚洲人成亚洲人成在线观看| 欧美国产在线视频| 日韩精品福利在线| 丝袜亚洲欧美日韩综合| 91精品久久久久久久久久久久久久| 91香蕉嫩草神马影院在线观看| 国产成人精品久久亚洲高清不卡| 中文字幕亚洲欧美| 红桃av永久久久| 亚洲视频欧洲视频| 亚洲午夜久久久久久久| 久久久av亚洲男天堂| 国产视频欧美视频| 欧美精品videos性欧美| 91日韩在线播放| 77777少妇光屁股久久一区| 国产在线一区二区三区| 欧美极品少妇与黑人| 国产精品久久久999| 日韩高清不卡av| 欧美性xxxx极品高清hd直播| 亚洲成人免费网站| 成人免费在线视频网站| 97精品在线视频| 成人黄色免费片| 欧美国产日韩二区| 久久九九热免费视频| 日韩欧美综合在线视频| 日韩高清电影好看的电视剧电影| 精品一区精品二区| 黑人巨大精品欧美一区免费视频| 久久亚洲私人国产精品va| 成人黄色激情网| 国产精品综合网站| 国产精品久久久久久久久借妻| 日韩一区二区av| 成人福利网站在线观看11| 日韩精品久久久久久久玫瑰园| 欧亚精品在线观看| 久久久国产精品亚洲一区| 日韩欧美a级成人黄色| 色无极亚洲影院| 成人黄色午夜影院| 国产精品一区二区三区久久久| 国产精欧美一区二区三区| 欧美日本高清视频| 欧美性感美女h网站在线观看免费| 韩国欧美亚洲国产| 亚洲999一在线观看www| 国产精品视频网| 国产69精品99久久久久久宅男| 国产成人综合精品| 久久综合电影一区| 亚洲a级在线观看| 成人在线视频网| 久久久成人精品| 国产91色在线| 欧美精品在线第一页| 日韩电影中文字幕在线| 日韩在线视频观看| 国产亚洲福利一区| 欧美综合国产精品久久丁香| 日韩在线观看免费av| 亚洲成人黄色在线观看| 成人黄色免费看| 久久99精品久久久久久噜噜| 欧美黑人一区二区三区| 精品国产一区久久久| 国产精品专区h在线观看| 亚洲精品suv精品一区二区| 在线电影av不卡网址| 亚洲综合在线播放| 国产精品入口免费视频一| 97精品一区二区三区| 国产成人在线一区二区| 日韩中文字幕在线播放| 91综合免费在线| 中文字幕国产日韩| 亚洲色图美腿丝袜| 国产精品igao视频| 亚洲男人天堂九九视频| 欧美激情精品久久久久久变态| 国产精品 欧美在线| 黑人欧美xxxx| 欧美一区二区三区艳史| 亚洲国产97在线精品一区| 国产一区二区三区欧美| 国产一级揄自揄精品视频| 91久久精品国产91久久性色| 欧美在线精品免播放器视频| 国产精品久久久久久久9999| 国产一区二区三区在线观看网站| 96sao精品视频在线观看| 欧美韩国理论所午夜片917电影|