bit3 / packer
使用Assetic框架支持编译和压缩打包JS和CSS分发的包。
Requires
- php: >=5.4
- kriswallsmith/assetic: ~1.1
- symfony/console: 2.4.*
- symfony/process: 2.4.*
- symfony/yaml: 2.4.*
This package is not auto-updated.
Last update: 2022-02-01 12:33:34 UTC
README
将package.yml
添加到您的仓库中,并运行pack
命令。
配置
有3个配置文件。
default.yml
包含默认配置。
package.yml
包含包配置,用于您的项目。这个文件应该添加到您的仓库中。
package.local.yml
包含系统/环境特定的配置(如二进制文件的路径)。这个文件不应该添加到您的仓库中。
它们将按此顺序加载并合并。这意味着通常package.yml
包含包信息,而package.local.yml
包含系统上二进制文件的路径。
方便:如果您想要提供一个适用于您团队的package.local.yml
,例如所有人使用相同的系统环境,请将包含特定于系统环境的设置的package.local.yml.dist
放入您的仓库。您不应该在package.yml
中添加特定于系统环境的设置!
监视修改
许多编译器如sass/compass都有“监视”功能。但是,当使用一系列编译器和压缩器时,这并不容易自动化。使用--watch
(-w
)标志将导致packer监视包的修改。
如果您使用导入(如sass的@import
规则)或嵌入(如cssembed过滤器),您可能想指定哪些文件必须被监视?只需在package.yml
中添加一个watch
块,直接在files
块之后,并指定要监视的文件或目录。
packages: dist/package.css: files: # remind that all files here will be watched anyway - reset.css watch: # watch a single file - src/file_to_watch.css # directories are also allowed - assets/images/ # or watch all watches from another package - @dist/other_package.css
部署
使用“监视”功能对于本地开发来说很好,但您必须将本地编译并推送到远程主机怎么办?这可能是在您的网站位于没有shell/编译器支持的共享主机上时必要的。
使用部署非常容易,首先您需要定义您的部署命令
deploy: - notify-send "Build %file% finished"
然后使用命令的--deploy
选项:pack --deploy
在每个包之后,都会执行部署。占位符%file%
将被包的路径名替换,%package%
被包名替换,%deploy%
被部署目标(默认为default
)替换。
输出示例
$ pack dist/package.css --deploy
parse configuration
+ load .../bit3/packer/src/default.yml
+ load package.yml
+ load package.local.yml
build package dist/package.css
* build collection from dist/package.css
~ filters:
- cssrewrite [Assetic\Filter\CssRewriteFilter]
+ add local file src/reset.css
* write file dist/package.css
deploy to notify
* exec notify-send "Build dist/package.css finished"
部署目标
对于简单的设置,有一个部署目标很好,但您需要根据您当前的工作部署到多个地方怎么办?一个可能的用法场景是预览和生产的部署。
当您添加deploy
部分时,所有命令都将添加到default
部署目标。为了定义多个部署目标,请在deploy
部分中分组命令。
deploy: preview: - scp %file% user@preview.example.com:/var/www/vhosts/preview.example.com/assets/ production: - scp %file% user@example.com:/var/www/vhosts/example.com/assets/
现在您有两个部署目标,可以分别通过pack --deploy preview
和pack --deploy production
使用,或者通过单个pack --deploy preview --deploy production
一起使用。
提示 两者之间完全没有区别
deploy: - <cmd>
和
deploy: default: - <cmd>
提示 同时混合使用分组和非分组命令也是可能的
deploy: - <cmd 1> production: - <cmd 2>
这完全等同于
deploy: default: - <cmd 1> production: - <cmd 2>
警告 如果您想部署特定的包(pack dist/only_this_package.css
)并将它们部署到default
部署目标(pack --deploy
),如果仅使用pack --deploy dist/only_this_package.css
,则可能会假定包名为部署目标。只需在--deploy
后添加default
: pack --deploy default dist/only_this_package.css
,或者简单地交换参数:pack dist/only_this_package.css --deploy
。
package.yml
参考
packages: dist/package.css: filters: [cssrewrite] files: # add a string - | /* * (c) <copyright holders> */ # add a static file - src/reset.css # add a file with filters - [src/base.scss, [scss]] watch: # watch a file - src/file.css # watch a directory - assets/images/ # watch files from another package - @dist/other_package.css dist/package.min.css: # extend another package extends: dist/package.css # remind that this will overwrite the filters, not extend filters: [cssrewrite, yui-css] vendors: # this is a virtual package, that will not be build virtual: true files: - framework.css dist/package.with-vendors.css: # this will merge two packages into one files: # an @<name> will referencing another package, # so you can merge and mixin multiple packages - @dist/package.css - @vendors