亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

npm run eject

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

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

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

eject的弊端

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

這還不是最關(guān)鍵的,因為我的項目使用了antd作為UI框架,其使用了react-app-rewired這個東東,導(dǎo)致我在eject之后執(zhí)行npm run build會報錯。

react-app-rewired是什么?

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

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

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

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

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

引入之后,會有一個config-overrides.js文件,因為我引入了antd,里面已經(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)記代碼的+號哈):

// 此文件是為了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操作,很遺憾,只能通過版本庫回退版本了。

尾聲:配置代碼解析

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

const path = require('path');

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

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

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

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

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

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

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

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

相關(guān)文章

  • react批量引入svg圖標(biāo)的方法

    react批量引入svg圖標(biāo)的方法

    這篇文章主要介紹了react批量引入svg圖標(biāo)的方法,在批量引入之前,我們需要安裝一個包并配置到typescript.json文件中,需要的朋友可以參考下
    2024-03-03
  • react基礎(chǔ)知識總結(jié)

    react基礎(chǔ)知識總結(jié)

    這篇文章主要介紹了react常用的基礎(chǔ)知識總結(jié),幫助大家更好的理解和學(xué)習(xí)使用react框架,感興趣的朋友可以了解下
    2021-04-04
  • React三大屬性之props的使用詳解

    React三大屬性之props的使用詳解

    這篇文章主要介紹了React三大屬性之props的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React文件名和目錄規(guī)范最佳實踐記錄(總結(jié)篇)

    React文件名和目錄規(guī)范最佳實踐記錄(總結(jié)篇)

    React在使用時非常靈活,如果沒有一個規(guī)范約束項目,在開發(fā)過程中會非?;靵y,本文將介紹幾個優(yōu)秀的規(guī)范,介紹文件名和目錄前,需要先簡述一下幾種通用的類型,用來區(qū)分文件的功能,感興趣的朋友一起看看吧
    2022-05-05
  • 詳解react-refetch的使用小例子

    詳解react-refetch的使用小例子

    這篇文章主要介紹了詳解react-refetch的使用小例子,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • react-draggable實現(xiàn)拖拽功能實例詳解

    react-draggable實現(xiàn)拖拽功能實例詳解

    這篇文章主要給大家介紹了關(guān)于react-draggable實現(xiàn)拖拽功能的相關(guān)資料,React-Draggable一個使元素可拖動的簡單組件,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 詳解React項目中碰到的IE問題

    詳解React項目中碰到的IE問題

    這篇文章主要介紹了React項目中碰到的IE問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • React學(xué)習(xí)之事件綁定的幾種方法對比

    React學(xué)習(xí)之事件綁定的幾種方法對比

    這篇文章主要給大家介紹了關(guān)于React學(xué)習(xí)之事件綁定的幾種方法對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • react腳手架構(gòu)建運行時報錯問題及解決

    react腳手架構(gòu)建運行時報錯問題及解決

    這篇文章主要介紹了react腳手架構(gòu)建運行時報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用react-dnd編寫一個可拖拽排列的list

    使用react-dnd編寫一個可拖拽排列的list

    這篇文章主要為大家詳細(xì)介紹了如何使用react-dnd編寫一個可拖拽排列的list,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03

最新評論