UglifyJS 在 Symfony2 生产环境中不工作
UglifyJS not working in Symfony2 production environment
我相信我配置正确 -- 这是我的 config.yml:
assetic:
debug: "%kernel.debug%"
use_controller: false
node: "/usr/local/bin/node"
bundles: [ ]
#java: /usr/bin/java
filters:
uglifyjs2:
# the path to the uglifyjs executable
bin: "%kernel.root_dir%/Resources/node_modules/.bin/uglifyjs"
cssrewrite: ~
我在项目中本地存储了 uglifyjs,只是为了更容易分发。
我正在执行以下操作以使用 uglifyjs 生成所有 JS 文件:
{% javascripts
'vendor/bower_components/jquery/dist/jquery.min.js'
'vendor/bower_components/bootstrap-sass/assets/javascripts/bootstrap.min.js'
'vendor/bower_components/angular-route/angular-route.min.js'
'vendor/bower_components/underscore/underscore-min.js'
'vendor/bower_components/angular-cookies/angular-cookies.min.js'
'js/test1.js'
'js/test2.js'
filter='?uglifyjs2' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
如果我在开发模式下加载页面 (/app_dev.php),它工作正常,只是单独加载文件,但被 uglifyjs 缩小了;但是如果我尝试在生产环境中加载它,它会将所有这些 js 文件合并到一个 js 文件中(即 a07da66.js)。我面临的问题是,在尝试加载该文件时出现 404 未找到错误 (a07da66.js)。它尝试在 js/a07da66.js
访问它 - 默认情况下似乎在 js/ 下创建它们。
为什么它在 js/ (js/a07da66_jquery.min_1.js) 下创建新文件时在 app_dev.php 中工作正常,但在生产中却不行?
您必须 运行 app/console --env=prod assetic:dump
才能为生产环境生成资产。
经验法则:
- 在 dev 模式下,保持
app/console assetic:watch --force
运行ning 在后台(至少在处理 JS/CSS 文件时)。每当文件更改时,它将重新生成 dev 资产。
- 当 deploying/building、运行
app/console --env=prod assetic:dump
一次,以便生成 prod 的组合资产。
prod 模式的想法是生成当前开发的某种构建或快照。因此,您将仅在创建构建时使用 app/console --env=prod assetic:dump
。
当然,你可以将你的dev环境切换到prod进行简单测试,但是你必须执行构建过程,也(包括生成 prod 资产)。
在 Symfony 3+ 中,您必须 运行 bin/console assetic:dump --env=prod
才能为 prod 环境生成文件。
如果您对资产进行了修改,则每次都必须 运行 bin/console assetic:watch
重新生成文件。
我相信我配置正确 -- 这是我的 config.yml:
assetic:
debug: "%kernel.debug%"
use_controller: false
node: "/usr/local/bin/node"
bundles: [ ]
#java: /usr/bin/java
filters:
uglifyjs2:
# the path to the uglifyjs executable
bin: "%kernel.root_dir%/Resources/node_modules/.bin/uglifyjs"
cssrewrite: ~
我在项目中本地存储了 uglifyjs,只是为了更容易分发。
我正在执行以下操作以使用 uglifyjs 生成所有 JS 文件:
{% javascripts
'vendor/bower_components/jquery/dist/jquery.min.js'
'vendor/bower_components/bootstrap-sass/assets/javascripts/bootstrap.min.js'
'vendor/bower_components/angular-route/angular-route.min.js'
'vendor/bower_components/underscore/underscore-min.js'
'vendor/bower_components/angular-cookies/angular-cookies.min.js'
'js/test1.js'
'js/test2.js'
filter='?uglifyjs2' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
如果我在开发模式下加载页面 (/app_dev.php),它工作正常,只是单独加载文件,但被 uglifyjs 缩小了;但是如果我尝试在生产环境中加载它,它会将所有这些 js 文件合并到一个 js 文件中(即 a07da66.js)。我面临的问题是,在尝试加载该文件时出现 404 未找到错误 (a07da66.js)。它尝试在 js/a07da66.js
访问它 - 默认情况下似乎在 js/ 下创建它们。
为什么它在 js/ (js/a07da66_jquery.min_1.js) 下创建新文件时在 app_dev.php 中工作正常,但在生产中却不行?
您必须 运行 app/console --env=prod assetic:dump
才能为生产环境生成资产。
经验法则:
- 在 dev 模式下,保持
app/console assetic:watch --force
运行ning 在后台(至少在处理 JS/CSS 文件时)。每当文件更改时,它将重新生成 dev 资产。 - 当 deploying/building、运行
app/console --env=prod assetic:dump
一次,以便生成 prod 的组合资产。
prod 模式的想法是生成当前开发的某种构建或快照。因此,您将仅在创建构建时使用 app/console --env=prod assetic:dump
。
当然,你可以将你的dev环境切换到prod进行简单测试,但是你必须执行构建过程,也(包括生成 prod 资产)。
在 Symfony 3+ 中,您必须 运行 bin/console assetic:dump --env=prod
才能为 prod 环境生成文件。
如果您对资产进行了修改,则每次都必须 运行 bin/console assetic:watch
重新生成文件。