Ember 为 CDN 新鲜度发布唯一资产文件名?

Ember publish unique asset filename for CDN freshness?

为了强制从顽固的 CDN 加载更新的静态资产,我正在寻找一种方法来在 app/index 中发布我的每个 src="assets/... 引用。html 到唯一的文件名,以保持 CDN 分发新鲜。

也许在 index.html:

<link rel="stylesheet" href="assets/vendor.css?version={{content-for 'version'}}">

然后在其他地方我可能会用随机数或构建标记覆盖自定义 content-for 值。

想法?谢谢!

我想您可以通过配置 ember-cli-build.js 文件来做到这一点。此文件的默认值如下所示:

// ember-cli-build.js
var app = new EmberApp({
  outputPaths: {
    app: {
      html: 'index.html',
      css: {
        'app': '/assets/application-name.css'
      },
      js: '/assets/application-name.js'
    },
    vendor: {
      css: '/assets/vendor.css',
      js: '/assets/vendor.js'
    }
  }
});

看看configuring output paths section of the ember-cli user guide

答案是Ember fingerprinting

它在生产中默认启用:

ember build --environment=production

这将在 index.html 和相应的资产文件名中产生(类似行)以下内容:

<link rel="stylesheet" href="assets/vendor-d41d8cd98f00b204e9800998ecf8427e.css" integrity="sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==" >

要默认为所有环境启用指纹识别,请将此添加到您的 ember-cli-build.js:

// ember-cli-build.js
var app = new EmberApp({
  fingerprint: {
    enabled: false
  }
});