0

在尝试打包使用 SDK 1.9 版构建的 Firefox 插件时,我遇到了一个奇怪的问题。扩展目录结构是这样的:

├── 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.jsdata运行'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

如果我不 uglify JS 文件,那么一切似乎都可以正常工作,当我解压缩 xpi 时,我将拥有一个完整的 lib 目录,正如我所期望的那样。

请注意,这不是丑化过程的问题(这是我检查的第一件事)。当我复制代码库并对其进行 uglify 时,我可以在此时停止该过程并列出lib目录。它将包含我期望的所有 uglified 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
4

1 回答 1

2

如果lib/uri.js插件的任何 js 文件都不需要,它将从最终的 XPI 中删除。因此,如果您require('./uri.js')的 main.js 中有该文件,则该文件应该在打包后存在。

我的猜测是,丑化库使得当前的 cfx 工具无法生成包含所有依赖项的正确清单。请参阅清单生成

请注意mozilla-labs-jetpack 邮件列表上的原始帖子,将答案复制到此处以对不了解 ML 的其他人有用。

于 2012-09-24T13:15:10.810 回答