欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解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í)行之前,請將代碼備份或提交版本庫

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)的,盡量簡化了前端的開發(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的情況下修改打包地址

思路雖然有了,但是對于前端基礎(chǔ)薄弱的后臺(tái)開發(fā)來說,還是不知道怎么實(shí)操,在看了幾篇issue之后,Changing the default paths,Change 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)記代碼的+號哈):

// 此文件是為了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é)束。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

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

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

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

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

    詳解react-refetch的使用小例子

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

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

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

    詳解React項(xiàng)目中碰到的IE問題

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

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

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

    react腳手架構(gòu)建運(yùn)行時(shí)報(bào)錯(cuò)問題及解決

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

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

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

最新評論