国产探花免费观看_亚洲丰满少妇自慰呻吟_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, '/'), }, ...}             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 桑植县| 沐川县| 罗江县| 望奎县| 牡丹江市| 汉中市| 桂东县| 龙胜| 泌阳县| 天峻县| 微博| 甘谷县| 汪清县| 如皋市| 扬州市| 临高县| 邹平县| 志丹县| 禹州市| 宁国市| 霍州市| 博乐市| 蓝田县| 洞口县| 永寿县| 弥渡县| 攀枝花市| 庄浪县| 荔波县| 桐梓县| 长葛市| 五指山市| 延长县| 新源县| 临桂县| 汉沽区| 乌兰县| 淮南市| 合阳县| 潼南县| 西丰县|