[英]How to build a production version of React without minification?
我一直在或多或少地遵循官方指南來使用 React 設置本地開發環境,它似乎使用了create-react-app
,它確實設置了很多。
現在,如果我運行npm run build
我會得到build
文件夾中所有內容的縮小版本。 但是,如果我運行npm start
服務的版本似乎沒有任何修改。 但是我看不到這些文件。
所以要么:
npm start
生成的文件嗎? 因為這些似乎是未修改的。 ( build
永遠不會在那里修改)npm run build
,以便它使用未最小化的文件進行“開發”構建嗎?我的目標只是獲得未最小化版本的反應腳本。
至於最后一個問題,我已經按照這個問題中的建議嘗試了一些參數和環境變量,但是正如您所看到的,它失敗了:
$ NODE_ENV=dev npm run build --dev --configuration=dev
> example-project@0.1.0 build [...]
> react-scripts build
Creating an optimized production build...
[...]
我的package.json
有默認腳本:
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
注意:請不要問我為什么這樣做或試圖說服我這是不好的。 我可能想要這個的原因有很多,例如調試或這個特定的用例。
要更改 webpack 配置和構建腳本,您必須從 create-react-app 中彈出(我不建議執行此步驟,因為它會破壞未來的兼容性),或者您可以使用 rewire 之類的工具來覆蓋某些設置
看看這個https://github.com/timarney/react-app-rewired
我個人使用只是重新布線
npm i rewire --save-dev
這是我過去為我的一個項目創建的示例配置,它運行良好!
構建.js
const rewire = require('rewire');
const defaults = rewire('react-scripts/scripts/build.js');
const config = defaults.__get__('config');
// Consolidate chunk files instead
config.optimization.splitChunks = {
cacheGroups: {
default: false,
},
};
// Move runtime into bundle instead of separate file
config.optimization.runtimeChunk = false;
// JS
config.output.filename = '[name].js';
// CSS. "5" is MiniCssPlugin
config.plugins[5].options.filename = '[name].css';
config.plugins[5].options.publicPath = '../';
然后在我的 package.json 中,我更改了這樣的 npm 腳本鏈接(將運行 build.js 腳本的節點構建)
包.json
"scripts": {
"start": "react-scripts start",
"build": "node build && gulp",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
所以如果你真的想從 create-react-app 中彈出,你所要做的就是運行
npm run-script eject
然后您將獲得一個包含 create-react-app 使用的所有配置的新文件夾
但是正如我之前所說的,沒有理由不使用重新布線而只是覆蓋配置而不是彈出
如果有幫助,請不要忘記標記為答案干杯和成功
為什么看不到源文件? 這是我會嘗試的:
npm run start
啟動你的npm run start
應用npm run start
http://localhost:3000
cmd+option+j
將打開開發人員工具。 然后單擊源選項卡:在此選項卡中,您將看到由 react 的構建配置創建的包。 現在這些包的輸出可能不漂亮,但它就在那里。 或者,即使您使用create-react-app
,您的應用程序的所有構建配置設置都包含在您的webpack.config.js
文件中。 由於此配置僅封裝在react-scripts
節點模塊中。 因此,也許您可以嘗試直接編輯此文件,而無需彈出: <base_path>/node_modules/react-scripts/config/webpack.config.js
。 盡管您需要小心不要破壞現有的配置設置。 您可能想弄亂生產版本的source-map
設置。 至少這樣,如果你破壞了這個文件,你總是可以刪除並重新安裝react-scripts
並返回到你的初始配置。 這也將允許您在“半安全”沙盒環境中進行自定義。 請記住, create-react-app
沒有提供任何魔法,而只是為您的構建配置設置有用的默認值。
最后,正如@xzesstence 指出的,您可以嘗試react-app-rewired模塊。
希望這有幫助!
我想要一個 React 應用程序的未混淆代碼——主要是出於好奇,我有源代碼——同時有在 Angular 中重寫它的工作(生成一個更易於維護的應用程序,其大小為 5%,依賴項為 1%)。
我從未使用過 React 但通過修改文件發現
<base_path>/node_modules/react-scripts/config/webpack.config.prod.js
並用以下內容替換 module.exports 下的大型優化配置項...
module.exports = {...
optimization: {
minimize: false,
splitChunks: {
chunks: 'all',
name: true
},
runtimeChunk: true
},
npm run build構建了未混淆的、可讀的代碼,按預期運行,沒有使用其他修改。 僅將 Gitbash 與命令npm install 、 npm run build和npm start 一起使用- 只是認為有人可能會覺得這很有用。
我不推薦這樣做,因為你想要的代碼仍然包裹在 webpack eval 中。 從源代碼中選擇有用的部分或重新構建應用程序會更容易。 充其量,我必須了解集群 react 和 webpack 是什么。
文件保存在服務器進程內存中並且不會寫入磁盤,除非您彈出腳本(或者如果可以使用像“rewire”這樣的工具)並修改它們以使用writeToDisk
選項將其寫入磁盤,如中所述webpack DevServer 文檔。
但是,您可以通過導航到webpack-dev-server
下的webpack-dev-server
端點來獲取實際的文件列表/鏈接。
例如,如果在 localhost:3000 使用默認 url,則使用以下 url 查看服務器上的所有文件:
http://localhost:3000/webpack-dev-server
但您真正需要的只是 index.html(通常只是加載 JS 文件的存根)和以下 3 個 JS 文件,它們在所有 create-react-app 分期付款中似乎都一致,以及它們各自的源代碼地圖文件。
您可以右鍵單擊頁面上的鏈接並保存它們,或者您可以直接導航鏈接或從 Chrome 開發工具“源”選項卡中獲取它們。
請注意,通常對於代碼更改僅更新 main.chunk.js 文件,因此對於平均代碼更改,您可能只獲取更新的 main.chunk.js 和 main.chunk.js.map 文件。
我知道現在回答這個為時已晚,但試試這個npm i -D cra-build-watch
。
我覺得這個庫被低估了,但它只是觀察 react 應用程序中的變化,而不是一次又一次地重新構建整個包。
盡管重新布線有助於通過不縮小構建來進行構建,但是,它仍然會一次又一次地經歷整個構建過程。
在這個問題上花了一整天,我找不到辦法得到生產代碼的非縮小版本,
我所做的是:打開 chrome 上的開發工具,導航到源選項卡; 現在找到 javascript 文件(在 create-react-app 中它通常在 static > js > main.js 中)
當 javascript 文件可見時,在屏幕的左下角會出現一對大括號(看圖片):
當你點擊花括號時,它美化了代碼,然后你可以在代碼中添加斷點,處理那段代碼並不方便,但現在這對我有用。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.