2013-12-21 28 views
7

在準備部署代碼時,我將如何清理node_modules文件夾如何在準備部署時清理node_modules文件夾

我使用節點的WebKit將某個應用寧可包括可能的文件量最少時捆綁應用程序的解壓縮過程的最終版本需要一些時間。

我已經看了npm dedupe,並使用npm install --production擺脫重複的,並獲取唯一的生產文件,但是我還是留下了Readme文件,benchmarkstestsbuild文件,我不需要。

我想用什麼在node_modules夾中的每個模塊,最終是LICENSE文件,如果它存在,package.json和其他任何我需要的模塊運行,但僅此而已。

問題:How to automatically clean a node_modules directory for a SCM commit在某種程度上朝着相同的方向前進,但它談論的是實際上並非真正在尋找的東西。

問題:NPM clean modules再次與我的相同,但不完全在那裏。

This答案有幫助,因爲它是捆綁最終應用的dedupe更高效的版本。

更新
我試圖從here鏈接的自定義模塊,但它似乎沒有正常工作,即使經過一番擺弄。

說了這麼多,我還沒找到正確的答案呢。


下面是我正在尋找的一個例子。

在我的項目中,我目前有兩個依賴關係:socket.iosocket.io-client

他們一起彌補15 MB與文件文件夾。

手動清潔readmemakefileVC++構建文件如.pdb.obj和其他不必要的文件,我能夠與文件萎縮下來到2.74 MB在文件夾。
這隻有兩個模塊。

我想知道是否有辦法自動執行此操作,最好是使用npm

+0

你可以寫'.bat | .sh'腳本自動化你的release.etc ..但很快你會最終使用'grunt' – Gntem

+0

我打開創建一個咕task任務,但我不知道是否有一個適當的方式做到這一點... –

+0

你如果它不存在,可以創建自己的依賴關係檢查器。 – Ariaan

回答

2

好清理node_modules用於webkit應用程序的部署,其種類比較困難,因爲node_modules目錄下的模塊都安裝了帶或不帶測試文件的其他misc文件等等,如果模塊的擁有者已聲明一個.npmignore文件與dir /文件(如testsexamples)將在所有者發佈其模塊時從打包過程中排除,但它將正常存在於存儲庫(git)中。

Exclude test code in npm package?

以上留在模塊的業主手中,如果他/她「忘記」做一個,然後包將包含幾乎一切。


注意,因爲你不使用 developmentsocket.iosocket.io-client,這並不意味着你必須 npm install socket.io --save-dev,因爲它是由它的主人上傳一個簡單的 npm install socket.io -V將安裝產包。
可能的解決方法是製作一個 grunt任務,根據需要清理整個 node_modules

一對夫婦的規則將

  • testtests目錄或*test*.js文件
  • build目錄(不知道它可能包含一些二進制文件,有時是必要的)
  • history.md

GruntJS


希望我以某種方式幫助,也看看 Tilemill以及他們如何部署他們的應用程序。

1

與NPM一起安裝的模塊不應包含開發文件(即基準,測試等)。如果包含它們,則應聯繫模塊維護人員並要求將其添加到.npmignore

注意:在這種情況下的開發文件意味着開發實際模塊所需的文件,而不是您的應用程序。

之前曾有人建議過,但在gruntdeploy任務可能是一個好主意。清理後請確保test應用程序。 grunt-contrib-clean非常適合清潔。

請參閱.npmignoreconnect瞭解不應包含在生產包中的文件/目錄的一些想法。

-1

我認爲你正在尋找npm prune

NPM修剪[<name> [<name ...]]

此命令將刪除 「多餘的」 包。如果提供的軟件包名稱爲 ,則僅刪除與提供的名稱中的一個匹配的軟件包 。

無關程序包是父程序包的依賴項列表中未列出的程序包。

文檔https://docs.npmjs.com/cli/prune

+0

'npm prune'只刪除node_modules中不存在於package.json中的包,它不會「清理」它們 – aluxian

5

該模塊試圖智能地清理node_modules文件夾:

modclean

安裝:

npm install modclean -g 

npm install modclean --save-dev 

用法:

modclean 

它使用一組默認模式來從模塊整個依賴關係樹刪除不必要的膨脹。

1

也許你對這個小小的find命令感興趣,我已經組裝了一段時間。請注意,這不是「一刀切」的解決方案!你需要非常仔細地檢查你的要求。它適用於node.js環境,並且肯定會破壞瀏覽器環境。我以npm的腳本作爲postinstall腳本運行在bash腳本中。

請勿盲目複製'N PASTE。你被警告了!

find node_modules \(\(-name "dist" -or -name "ts" -or -name "logos" -or -name "min" -or -name "test*" -or -name "doc*" -or -name "tst" -or -name "example*" -or -name "build" -or -name "man" -or -name "benchmark*" \) -and -type d \) -or \ 
    \(\(-iname "readme*" -or -iname "changelog*" -or -iname "notice*" -or -iname "test*.js" -or -iname "*.min.js" \) -and -type f \) -or \ 
    \(-path "*moment-timezone/data/unpacked*" -and -type d \) 

可以肯定,我沒有添加最後一行| xargs rm -rf。您可以安全地執行上述命令而不刪除任何內容,然後將管道添加到xargsrm以使其真正發生。

find命令做了什麼?我會通過模式來解釋它的模式。

  1. \(\(-name "dist" -or -name "ts" -or -name "logos" -or -name "min" -or -name "test*" -or -name "doc*" -or -name "tst" -or -name "example*" -or -name "build" -or -name "man" -or -name "benchmark*" \) -and -type d \) =>搜索與引號中的文本匹配的目錄。 *是通配符。

  2. \(\(-iname "readme*" -or -iname "changelog*" -or -iname "notice*" -or -iname "test*.js" -or -iname "*.min.js" \) -and -type f \) =>在任何文件夾中搜索引號中文本匹配而不考慮大小寫的文件。 特別是"*.min.js"這種模式對某些人可能是危險的。

  3. \(-path "*moment-timezone/data/unpacked*" -and -type d \) =>從當下移除未打包的數據。這也節省了大量的空間。

隨意改進!

0

我正在研究這部署到AWS的elasticbeanstalk。當我運行eb deploy命令時,它奇蹟般地找到什麼樣的文件上傳和它沒有得到任何bower_componentsnode_modules的。我想知道如何。

事實證明,eb deploy調用git archive引擎蓋下。 git archive檢出您指定的分支並製作所有文件的zip文件。

大概你不會像你的node_modules或bower_components目錄那樣提交git,所以git archive可能是解決你的問題的方法。如果你想避免諸如測試用例和自述文件等等,你可能還需要在git中做一些標記。但是你從一個小得多的列表開始,顯然你排除了大部分你想排除的東西。