2012-09-24 48 views
0

嘗試打包使用SDK 1.9版構建的Firefox加載項時,出現了一個奇怪的問題。擴展目錄結構是這樣的:cfx xpi命令刪除addon/lib目錄中的壓縮文件?

├── data 
│   ├── file1.js 
│   ├── file2.js 
│   ├── jquery.min.js 
│   └── uri.js 
├── lib 
│   ├── file3.js 
│   ├── main.js 
│   ├── services 
│   │   ├── file4.js 
│   │   ├── file5.js 
│   │   └── file6.js 
│   └── uri.js 
├── package.json 
└── package.json.backup 

作爲構建過程的一部分,我通過uglify.js運行data和「lib`目錄。這似乎工作正常。基本上,我將代碼庫複製到不同的位置,通過uglify運行它,並獲得除JS文件被壓縮之外的相同目錄結構。我運行了cfx xpi --pkgdir=path/to/ugly/codebase將代碼打包到xpi中。

如果我然後將生成的.xpi移動到一個新目錄中,請將其解壓到unzip並檢查其內容,我的lib目錄中的大部分都已被刪除。 data目錄中的文件沒問題。

tree resources/addon_name 
resources/addon_name 
├── data 
│   ├── file1.js 
│   ├── file2.js 
│   ├── jquery.min.js 
│   └── uri.js 
└── lib 
    └── main.js 

如果我不醜化JS文件,然後一切似乎很好地工作,當我解壓XPI我會因爲我希望一個完整的lib目錄。

請注意,這不是uglifying進程的問題(這是我檢查的第一件事)。當我複製代碼庫並將其隱藏起來時,我可以停止該過程並列出lib目錄。它將包含我期望的所有醜陋的JS文件。只有在包裝和隨後解壓之後纔會消失。

我試過用全新的擴展來重現這個問題,但是我得到了一個稍微不同的問題。基本上,無論是否壓縮,lib目錄中的文件都將在打包時被刪除。基本上我的步驟是:

mkdir test_extension 
cd test_extension && cfx init 
touch lib/uri.js // this is 
cd .. && cfx xpi pkgdir=test_extension // Have to run this part twice to get ID 
mkdir unpack && mv test_textension.xpi unpack 
cd unpack 
unzip test_extension.xpi 
ls resources/test_extension/lib 
=> main.js // the uri.js file is missing 

回答

2

如果lib/uri.js不會從您附加的任何js文件要求,將 從最終XPI刪除。因此,如果您的main.js文件中有require('./uri.js') ,則文件應在打包後存在。

我的猜測是,醜化庫使 不可能的目前的CFX工具生成 所有依賴關係的適當清單。見Manifest Generation

注意 mozilla-labs-jetpack郵件列表上的原始文章,複製答案在這裏是對其他人不知道ML的有用。