国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

create-react-app 修改為多入口編譯的方法

2024-05-06 15:32:16
字體:
來源:轉載
供稿:網友

需求和出發點

我們會有較多的小的單頁應用,主要是一些簡單的頁面和活動之類。這些頁面相互之間沒有交集,但是會有一些可以共用的代碼,資源、接口、組件啥的。

對此,我們想到了兩種解決方案:

react-router 路由方案; 同一個項目的多入口編譯;

針對我們的業務需求,其實 react-router 方案會有兩個小問題:

單個活動的修改,其實需要編譯整個項目; 若是不做編譯優化,整個項目的包會比較大,但其實沒必要,當然這個可以通過 react-router 的按需加載來解決;

權衡之下,我們還是選擇了第二個方案——改造項目成為多入口編譯。

文件結構設計

改進后,整個項目的結構大體如下:

- project  - build  - config  - public  - scripts  - src    - api    - component    - site      - site1        - index.html        - index.js        - ...      - site2        - index.html        - index.js        - ...  - package.json

site 文件夾下的所有文件夾都是一個獨立的項目,項目通用的代碼、資源被抽離到更外層的文件夾內,如 api、component 等,文件夾內都會有自己的 index.html 和 index.js,這會作為該項目的 html 模板和入口文件。下面,我們看下是如何修改編譯過程的。

修改入口和出口

編譯需要指定編譯的入口和輸出的位置,在 create-react-app 本來生成的 code 中,只有單入口和單出口,但是其實 webpack 是支持多入口、多出口的。

入口修改

create-react-app 命令生成的 config 文件夾中,有個 paths.js 文件,這里面 export 了比較常用的路徑。在這里,我對 src/site 文件夾內的文件夾進行了遍歷,生成為對象。具體代碼如下:

// all site pathsfunction allSitePath(source) { const { lstatSync, readdirSync } = fs const { join } = path const result = {} const isDirectory = source => lstatSync(source).isDirectory() readdirSync(source).map(name => {  let path = join(resolveApp(source), name)  if (isDirectory(path)) result[name] = path }) return result}module.exports = { ... allSites: allSitePath('src/site'),}

在 webpack.config.dev.js / webpack.config.prod.js 中找到 module.exports 的 entry 屬性,將其修改為:

// 動態生成 entryconst entry = {}Object.keys(paths.allSites).forEach(item => { entry[item] = [  require.resolve('./polyfills'),  require.resolve('react-dev-utils/webpackHotDevClient'),  require.resolve('react-error-overlay'),  paths.allSites[item] ]})module.exports = { ... entry: entry, ...}

出口修改

出口的修改分為兩部分,一部分是 module.exports 的 output,添加 name 以使靜態資源區分不同項目:

module.exports = { ... output: {  path: paths.appBuild,  pathinfo: true,  filename: 'static/js/[name].bundle.js',  chunkFilename: 'static/js/[name].chunk.js',  publicPath: publicPath,  devtoolModuleFilenameTemplate: info =>   path.resolve(info.absoluteResourcePath).replace(////g, '/'), }, ...}             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 西乌| 航空| 吉林省| 来凤县| 区。| 神农架林区| 通化市| 姚安县| 大石桥市| 迭部县| 奎屯市| 前郭尔| 通榆县| 海城市| 若羌县| 德保县| 七台河市| 杭锦旗| 商洛市| 平江县| 大方县| 武邑县| 随州市| 阿合奇县| 济阳县| 大足县| 腾冲县| 武安市| 万荣县| 平乡县| 伽师县| 修武县| 玛沁县| 晋宁县| 临朐县| 达日县| 达日县| 凤翔县| 类乌齐县| 和顺县| 大连市|