有没有办法告诉Assetic命令行文件在为dev环境构建时不生成复合“output”文件?
我们使用--watch配置运行它。我们有复合文件需要很长时间才能生成并且没有使用,所以这是一个严重的浪费时间。它还会使它重新生成该堆栈中的所有文件,而不是一个更改的文件。
有什么想法吗?如果没有,我很想我自己覆盖资产:dump命令,因为每次我们做一个微小的文件更改时我们都会浪费1-3分钟。 =(
Symfony版本:2.2.0(根据调试栏,只运行Composer更新而没有任何更改)
config.yml(资产块)
assetic:
debug: %kernel.debug%
use_controller: false
#bundles: []
#java: /usr/bin/java
filters:
cssrewrite: ~
less:
node: /usr/bin/node
node_paths: [/usr/local/lib/node_modules,/usr/lib/node_modules]
apply_to: "\.less"
typescript:
resource: %kernel.root_dir%/../src/GamePlan/Bundle/CoreBundle/Resources/config/assetic.typescript.xml
apply_to: "\.ts"
tsc: /usr/local/bin/tsc
node: /usr/bin/node
useOut: false
(自定义TypeScriptFilter,但它也发生在CSS文件中,所以它不应该是导致它的......它也是对官方回购中的那个进行相对较小的调整。)
config_dev.yml(资产块)
assetic:
use_controller: false
使用示例:
{% stylesheets output="bundles/mybundle/styles/mystyle.css"
filter="cssrewrite"
"@MyBundle/Resources/styles/a.less"
"@MyBundle/Resources/styles/b.less"
"@MyBundle/Resources/styles/subfolder/*.less"
"@MyBundle/Resources/styles/subfolder/*/*.less"
%}
<link type="text/css" rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}
运行命令(来自/ var / www作为www-data):
php Symfony/app/console assetic:dump --env=dev [--watch]
有或没有--watch不会更改生成的文件,只要它们全部或只是手表。
请注意,这是否会让任何人知道发生了什么,但它会在生成单个开发文件之前尝试生成复合文件。
我还确保我不会复制任何包含,引用其他块中的任何复合文件等。
它没有在HTML中加载复合文件,但我可以看到它们是从命令生成的。
如果需要更多信息,请告知我们。感谢。
答案 0 :(得分:1)
所以我最终通过DumpCommand获取了Assetic包。事实证明,无论环境如何,它们都是无条件生成的(如果我们处于调试模式,只有条件只能执行dev)。
为了自己解决这个问题,我只是复制了DumpCommand并制作了我自己的版本,最后我在上面添加了一个条件,所以只有环境是prod才会这样做。我也这样做了它只会在文件发生变化时转储dev文件。
这个解决方案并不完美,需要注意(例如,如果一个文件依赖于另一个文件,它就不会被重新编译,所以如果我有一个文件,我必须不时地运行原始文件编译器错误)。但是,它对我有用。
修改后的dumpAsset()如下所示:
private function dumpAsset($name, OutputInterface $output)
{
$asset = $this->am->get($name);
$formula = $this->am->getFormula($name);
if (!$this->am->isDebug()) {
// start by dumping the main asset
$this->doDump($asset, $output);
}
// dump each leaf if debug
if (isset($formula[2]['debug']) ? $formula[2]['debug'] : $this->am->isDebug()) {
foreach ($asset as $leaf) {
$mtime = filemtime(($leaf->getSourceRoot() ? $leaf->getSourceRoot() . DIRECTORY_SEPARATOR : '') . $leaf->getSourcePath());
if ($mtime >= $asset->getLastModified()) {
$this->doDump($leaf, $output);
}
}
}
}
答案 1 :(得分:0)
private function dumpAsset($name, OutputInterface $output)
{
$asset = $this->am->get($name);
$var = false;
$mtime3 = filemtime(str_replace('_controller/', '', rtrim($this->basePath, '/').'/'.$asset->getTargetPath()));
foreach ($asset as $leaf) {
$mtime = $leaf->getLastModified();
$mtime2 = filemtime(str_replace('_controller/', '', rtrim($this->basePath, '/').'/'.$leaf->getTargetPath()));
if ($mtime2 > $mtime3)
$var = true;
if ($mtime > $mtime2)
{
$var = true;
$this->doDump($leaf, $output);
}
}
if (!$this->am->isDebug() && $var) {
$this->doDump($asset, $output);
}
}
Merci et ce fut parfait。
By 42的新秀;)