最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解React項(xiàng)目如何修改打包地址(編譯輸出文件地址)

 更新時(shí)間:2019年03月21日 09:49:26   作者:沉靜  
這篇文章主要介紹了詳解React項(xiàng)目如何修改打包地址(編譯輸出文件地址),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

好吧,筆者是一個(gè)后端開發(fā)。以前是做C/S項(xiàng)目出身,毫無Web前端基礎(chǔ),為了更好地理解Web開發(fā),去年開始嘗試使用公司使用的前端框架React來搭建團(tuán)隊(duì)內(nèi)部使用的系統(tǒng)。通過這個(gè)項(xiàng)目的開發(fā),也讓我更好地理解了前端同事的不容易,更加堅(jiān)定了寫好接口文檔的決心。

最近在把自己做的這個(gè)內(nèi)部系統(tǒng)遷移到公司的統(tǒng)一平臺(tái)的時(shí)候,遇到了一個(gè)小問題,公司要求打包的目錄名必須為dist,而我這個(gè)項(xiàng)目是使用create-react-app搭建的,所以打包的目錄是默認(rèn)的build。

遂開始了查找如何修改打包目錄的資料。隨便在網(wǎng)上一搜,便是如下的解決方案:

使用eject命令暴露配置,然后修改打包地址

使用這個(gè)命令,是不可逆的,執(zhí)行之前,請(qǐng)將代碼備份或提交版本庫

1、使用eject命令暴露配置:

npm run eject

2、修改暴露出的配置文件config/path.js,將appBuild修改為需要輸出的位置。

3、使用npm install命令安裝依賴,然后執(zhí)行npm run build打包

這個(gè)方案當(dāng)然一點(diǎn)毛病都沒有,通過這個(gè)可以認(rèn)識(shí)到,create-react-app在創(chuàng)建React項(xiàng)目的時(shí)候,是隱藏了許多開發(fā)者不需要過多關(guān)心的配置項(xiàng)的,盡量簡(jiǎn)化了前端的開發(fā)。而eject命令則可以讓這些配置項(xiàng)暴露出來。

eject的弊端

要注意的是,eject命令是不可逆的(至少官方?jīng)]有提供回退的方法)。使用了這個(gè)命令,你就要接受你的開發(fā)目錄面多了很多的配置文件和腳本。

這還不是最關(guān)鍵的,因?yàn)槲业捻?xiàng)目使用了antd作為UI框架,其使用了react-app-rewired這個(gè)東東,導(dǎo)致我在eject之后執(zhí)行npm run build會(huì)報(bào)錯(cuò)。

react-app-rewired是什么?

作為一個(gè)后端開發(fā),最大的感觸就是,前端的網(wǎng)上資料有用的太少,因?yàn)楦鞣N框架、技術(shù)更新迭代太快,很多博客上的解決方案都已經(jīng)過時(shí)了。你們看到的我的這篇文章,可能很快也會(huì)過時(shí),但是我會(huì)把思路教給大家——話說,當(dāng)遇到一個(gè)技術(shù)問題,實(shí)在解決不了怎么辦?當(dāng)然是找官方文檔了。

通過在react-app-rewired的官方文檔,才知道這個(gè)工具的一個(gè)功能是在不eject的情況下,修改配置文件。上文說到的antd也是為了實(shí)現(xiàn)修改配置,才引入的這個(gè)工具。既然它的功能如此,那么用來修改打包地址應(yīng)該也是可行的。

使用react-app-rewired在不eject的情況下修改打包地址

思路雖然有了,但是對(duì)于前端基礎(chǔ)薄弱的后臺(tái)開發(fā)來說,還是不知道怎么實(shí)操,在看了幾篇issue之后,Changing the default pathsChange build output path之后,終于找到了方法。

首先當(dāng)然是要引入react-app-rewired了,這里我就不寫方法了,大家參考官方文檔,不會(huì)過時(shí)。

引入之后,會(huì)有一個(gè)config-overrides.js文件,因?yàn)槲乙肓薬ntd,里面已經(jīng)有了些內(nèi)容:

// 此文件是為了ant選擇性引入
const {injectBabelPlugin} = require('react-app-rewired');

module.exports = function override(config, env) {
  // antd選擇性引入
  config = injectBabelPlugin(['import', {libraryName: 'antd', libraryDirectory: 'es', style: 'css'}], config);
  return config;
};

增加如下代碼(去掉我用來標(biāo)記代碼的+號(hào)哈):

// 此文件是為了ant選擇性引入
const {injectBabelPlugin} = require('react-app-rewired');

module.exports = function override(config, env) {
  // antd選擇性引入
  config = injectBabelPlugin(['import', {libraryName: 'antd', libraryDirectory: 'es', style: 'css'}], config);

+  // 修改path目錄
+  const path = require('path');
+  const paths = require('react-scripts/config/paths');
+  paths.appBuild = path.join(path.dirname(paths.appBuild), 'dist');
+  config.output.path = path.join(path.dirname(config.output.path), 'dist');

  return config;
};

如此,再執(zhí)行npm run build就可以了,問題解決。

如果你已經(jīng)進(jìn)行了eject操作,很遺憾,只能通過版本庫回退版本了。

尾聲:配置代碼解析

到了這里,估計(jì)有部分同學(xué)還不滿意為什么以上代碼能夠解決問題,作為一個(gè)外行人,我按我的理解解釋下。

const path = require('path');

這行代碼是基于require.js,是一個(gè)js進(jìn)行引入包的工具。通過這行代碼,拿到path,才能夠?qū)β窂阶鎏幚怼?/p>

const paths = require('react-scripts/config/paths');

react-scripts里面有React項(xiàng)目用于打包的命令,以及配置文件,如果你進(jìn)行了eject,會(huì)發(fā)現(xiàn)config和script目錄里的內(nèi)容與react-scripts里的同名目錄驚人的相似??梢哉J(rèn)為eject是把這里的配置暴露出來了。這里這行代碼是為了獲取項(xiàng)目的路徑配置。

paths.appBuild = path.join(path.dirname(paths.appBuild), 'dist');

這行代碼是修改配置里的appBuild目錄,React項(xiàng)目在進(jìn)行build的時(shí)候,都是根據(jù)這里配置的目錄做的操作(例如檢查打包后的代碼大小,計(jì)算Gzip等),必須要修改,不然打包會(huì)失敗。

config.output.path = path.join(path.dirname(config.output.path), 'dist');

這行代碼就是實(shí)現(xiàn)我們目的的根源了,修改項(xiàng)目打包地址。

好了,到這里本文結(jié)束。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • react?定位組件源碼解析

    react?定位組件源碼解析

    這篇文章主要為大家介紹了react定位組件源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • React動(dòng)畫實(shí)現(xiàn)方案Framer Motion讓頁面自己動(dòng)起來

    React動(dòng)畫實(shí)現(xiàn)方案Framer Motion讓頁面自己動(dòng)起來

    這篇文章主要為大家介紹了React動(dòng)畫實(shí)現(xiàn)方案Framer Motion讓頁面自己動(dòng)起來,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 在react中使用 indexDb的方法

    在react中使用 indexDb的方法

    在React中使用IndexedDB進(jìn)行前端離線存儲(chǔ),可以存儲(chǔ)大量數(shù)據(jù),支持復(fù)雜的數(shù)據(jù)類型和高性能查詢,通過示例展示了如何創(chuàng)建數(shù)據(jù)庫、添加數(shù)據(jù)、查詢數(shù)據(jù)和構(gòu)建一個(gè)簡(jiǎn)單的待辦事項(xiàng)應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 詳解React中Props的淺對(duì)比

    詳解React中Props的淺對(duì)比

    這篇文章主要介紹了React中Props的淺對(duì)比的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-05-05
  • webpack 2的react開發(fā)配置實(shí)例代碼

    webpack 2的react開發(fā)配置實(shí)例代碼

    本篇文章主要介紹了webpack 2的react開發(fā)配置實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • 淺談React多個(gè)setState會(huì)調(diào)用幾次

    淺談React多個(gè)setState會(huì)調(diào)用幾次

    在React的生命周期鉤子和合成事件中,多次執(zhí)行setState,會(huì)被調(diào)用幾次,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-11-11
  • 淺談react路由傳參的幾種方式

    淺談react路由傳參的幾種方式

    這篇文章主要介紹了淺談react路由傳參的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 使用React-Window實(shí)現(xiàn)虛擬滾動(dòng)效果的示例代碼

    使用React-Window實(shí)現(xiàn)虛擬滾動(dòng)效果的示例代碼

    React-Window?是一個(gè)為?React?應(yīng)用程序中高效渲染大數(shù)據(jù)集而設(shè)計(jì)的庫,它基于窗口化或虛擬化的原則運(yùn)行,本文將使用React-Window實(shí)現(xiàn)虛擬滾動(dòng)效果,感興趣的可以了解下
    2024-01-01
  • React Router中Link和NavLink的學(xué)習(xí)心得總結(jié)

    React Router中Link和NavLink的學(xué)習(xí)心得總結(jié)

    這篇文章主要介紹了React Router中Link和NavLink的學(xué)習(xí)心得總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React + Node.js實(shí)現(xiàn)圖片上傳功能

    React + Node.js實(shí)現(xiàn)圖片上傳功能

    最近筆者在開發(fā)個(gè)人博客的后臺(tái)管理系統(tǒng),里面用到了圖片上傳相關(guān)的功能,在這里記錄并分享一下,希望可以幫到大家,話不多說直接開始吧,感興趣的朋友可以參考下
    2024-01-01

最新評(píng)論

鄂温| 冷水江市| 邓州市| 当阳市| 基隆市| 濮阳县| 平乐县| 揭西县| 白河县| 乐亭县| 定兴县| 大庆市| 黎城县| 屏东县| 永兴县| 宝应县| 呼玛县| 收藏| 阿图什市| 兴海县| 南溪县| 昆山市| 吴忠市| 集贤县| 六盘水市| 赣州市| 桦南县| 墨玉县| 克东县| 宁南县| 东台市| 宁远县| 博乐市| 盐城市| 永州市| 民丰县| 灵丘县| 缙云县| 安福县| 从江县| 麦盖提县|