[英]How do I get the webpack output file name with hash value in the js module code?
[英]How to get file hash name in Angular?
在Angular 4
我使用了Webpack
的(甚至File-loader
的) require 方法来获取图像哈希名称:
const versionedName = require('assets/images/icn-copy.svg');
它返回类似“ assets/images/icn-copy.435435fj5435f345345f435f435f345f.svg
”——散列文件名。 我可以用它来请求服务器。 但是在迁移到Angular 6
require 函数开始返回带有属性“ default
”的对象,该对象包含未经过哈希处理的名称。
如何在Angular 6
及更高版本中获得散列名称?
更新:我注意到迁移后的图像现在根本没有散列。 这可能是原因。 例如
.loader {
background-image: url('assets/images/spinner.svg');
...
}
结果在根中只是 spinner.svg 而不是spinner.214312fe21fe412f4ef.svg
更新 2 :由于问题现在已经解决,我很高兴听到绕过图像缓存的更好方法。 require()
绝对不是最好的方法。 这与资产中的图像无关。 这是关于请求的。 例如:
this.http.get('assets/images/spinner.svg') // will be cached
this.http.get('assets/images/spinner.214312fe21fe412f4ef.svg') // will NOT be cached.
问题是从Angular 6
开始,默认情况下禁用散列。 添加标志--output-hashing=all
解决了这个问题。 值得一提的是, Typescript 2.7
现在允许默认导入到 CommonJS/AMD/UMD( https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#support-for -import-d-from-cjs-from-commonjs-modules-with---esmoduleinterop )。 这意味着require()
现在返回的不是具有完整文件名的字符串,而是具有包含此string
默认属性的object
。 代替
icn-copy.435435fj5435f345345f435f435f345f.svg
现在:
{
default: "icn-copy.435435fj5435f345345f435f435f345f.svg"
}
但我仍然需要更好的解决方案! (看更新2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.