【问题标题】:Sails does not clear cache without hard refreshSails 不会在没有硬刷新的情况下清除缓存
【发布时间】:2017-11-16 15:29:32
【问题描述】:

我的 Sails 应用程序不会更新生产中的 javascript 文件。 我正在开始生产:

NODE_ENV=production 永远启动 app.js

但是当我打开网站时,我没有看到任何变化。即使我重新启动网站。更改仅在使用 ctrl+F5 硬刷新或手动清除缓存后应用。

但在本地它可以工作。

这可能与缓存有关,浏览器不会强制更新/清除缓存。如何解决?

我的任务/config/sails-linker.js:

  grunt.config.set('sails-linker', {
    devJs: {
      options: {
        startTag: '<!--SCRIPTS-->',
        endTag: '<!--SCRIPTS END-->',
        fileTmpl: '<script src="%s?v='+ new Date().getTime() +'"></script>',
        appRoot: '.tmp/public'
      },
      files: {
        '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject,
        'views/**/*.html': require('../pipeline').jsFilesToInject,
        'views/**/*.ejs': require('../pipeline').jsFilesToInject
      }
    },

因为我没有在生产中使用sails lift,所以我将 grunt 默认更改为:

/tasks/register/default.js

module.exports = function (grunt) {


grunt.registerTask('default', [
    'compileAssets',
    'linkAssetsBuildProd',
    'watch',
    'concat',
    'uglify',
    'cssmin',
    'sails-linker:prodJs',
    'sails-linker:prodJsJade',
  ]);
};

我不知道下一步该去哪里。

【问题讨论】:

  • 我建议您改用 pm2。它更好更完整!其次,生产模式的 grunt 任务不会监视 JS/CSS 文件中的变化,因为它会在生产之前缩小所有内容。要查看代码/样式中的实时更改,您应该正常使用sails lift。您的任务管道是错误的,因为 Grunt 在观看之前正在压缩/丑化......
  • 谢谢。我改变了咕噜声并更新了问题。这并没有帮助我实现我想要的 - 如果没有硬刷新,我的更改仍然不适用。
  • 我也安装并使用了 pm2 - 仍然没有任何变化。
  • 你能说清楚一点吗? “必需的硬重新加载”是您唯一关心的问题,还是有其他问题?帆是否没有以其他方式更新(无论是否在产品中,是否是本地机器)?我在 grunt 和 prod 模式方面遇到了困难,所以一旦我遇到你的问题,我可能会有一些见解。
  • 嗯。就像:当我更新我的服务器时,客户端没有得到更新的资产。如果我单击 f5,即使 10 次后也没有任何变化。如果我点击 ctrl+f5,只有这样我才能看到我更新的资产。在本地,我在简单的 f5 之后更新了资产。到目前为止,我尝试了许多不同的方法,但都没有成功。我不知道根在哪里..为什么缓存没有在生产中更新..

标签: node.js sails.js


【解决方案1】:

我现在这样修复它:

在 tasks/config/sails-linker.js 上添加了这个:

module.exports = function(grunt) {

  var time = new Date().getTime();

  grunt.config.set('sails-linker', {

然后从

更改每一行
fileTmpl: '<script src="%s"></script>'

fileTmpl: '<script src="%s?v='+ time +'"></script>'

在生产服务器上每次更新我运行的资产

sails www --prod 

然后

NODE_ENV=production pm2 start app.js

这行得通。至少。这每次都会生成带有新版本的新的缩小 javascript 文件,然后浏览器重新加载。

【讨论】:

  • 别忘了将 css 链接模板:'&lt;link rel="stylesheet" href="%s"&gt;' 替换为 '&lt;link rel="stylesheet" href="%s?v=' + time + '"&gt;'
  • 谢谢,但我的项目没有使用 css :)
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2022-07-22
  • 2015-11-28
  • 2021-11-12
  • 2016-08-07
  • 2017-06-16
  • 2019-05-01
相关资源
最近更新 更多