我有一个Symfony项目,其中包含许多脚本和样式。Encore大约需要4分钟才能在生产中执行:
npm run encore prod
它使用json-manifest-path进行版本控制。在执行过程中,我得到500响应。错误是:
呈现模板期间引发了异常(“资产清单文件“ XXX / web / build / manifest.json”不存在。”)。
这是因为清理:
Encore
.setOutputPath('web/build/')
.setPublicPath('/build')
.createSharedEntry('app', './assets/js/app.js')
.addStyleEntry('style', './assets/css/style.scss')
// ... more assets here
.enableSingleRuntimeChunk()
.cleanupOutputBeforeBuild() // <------------------- cleanup
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
.enableSassLoader(function(options) {}, { resolveUrlLoader: false })
.autoProvidejQuery()
;
我应该如何避免这个问题?
你不应该encore prod
在生产计算机上运行(以不应该composer install
在该计算机上运行的相同方式)。
构建和部署是不同的步骤。
你需要在不同的位置(与用于实际为应用程序服务的目录至少在一个不同的目录)中运行所有构建步骤,然后部署生成的“工件”(例如,构建结果)过程)。
如何执行此操作取决于你的服务基础结构和部署过程,但可能类似于:
mv
,cp
,等)。rsync
,scp
,ftp
等)无论你做什么,都需要避免运行长时间的进程来修改正在主动提供的文件。
构建过程可能很长,可以很长(只要我们希望它们是分类器即可),但是部署过程应尽可能短。