javascript - 如何访问在复制 webpack 插件期间散列的静态资源的实际名称/路径/url

标签 javascript angular typescript webpack webpack-4

所以我有使用复制 webpack 插件进行哈希处理的资源。

{
            from: "data/json/*.json",
            to: "data/json/[name].[hash:6].json",
},

现在在运行时我需要访问这些 json 文件的实际 url。 我理想的情况是能够在运行时获取这个 url,这样我就可以做类似的事情

let name = "tiles";
const tileDataUrl = requireUrl(`data/json/${name}.json`);
fetch(tileDataUrl) // tileData Url here would  data/json/tiles.abc34f.json


...

我需要的是一个方法 requireUrl (或者任何可能被调用的方法),它在运行时返回带有哈希值的静态资源的实际 url。

(对于任何想知道的人,哈希值用于此处进行缓存清除)

请并谢谢你:)

最佳答案

假设您使用的是版本 5,Webpack asset modules将提供您想要的内容,而不需要 copy-webpack-plugin。 Webpack 可以识别 require statement with expressions 。 Webpack 将自动为您包含所有可能匹配的文件,无需额外配置。在这种情况下,您可能需要注意 Webpack 知道名称设置为“tiles”的优化。以下是您的配置中所需的添加内容:

module.exports = {
   module: {
      rules: [
          {
              test: /data\/json\/.+\.json$/
              type: 'asset/resource',
              generator: {
                  // Look at https://webpack.js.org/configuration/output/#template-strings to see additional template strings.
                  filename: '[path][name].[hash:6][ext]'
              }
          }
      ]
   }
}

或者,对于 Webpack 4,您可以添加 file-loader作为依赖项并将其与等效的配置添加一起使用:

module.exports = {
   module: {
      rules: [
          {
              test: /data\/json\/.+\.json$/
              loader: 'file-loader',
              options: {
                  name: '[path][name].[hash:6][ext]'
              }
          }
      ]
   }
}

无论哪种方式,您的代码现在都可以简单地工作,如下所示:

let name = "tiles";
const tileDataUrl = require(`data/json/${name}.json`); // tileDataUrl will display the interpolated filename.
fetch(tileDataUrl);

关于javascript - 如何访问在复制 webpack 插件期间散列的静态资源的实际名称/路径/url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67012583/

相关文章:

javascript - 将 var 乘以数字插入 mongodb

javascript - 如何使用箭头键从一个文本框导航到另一个文本框

javascript - 如何以 Angular 对姓氏列表进行排序?

TypeScript:输入递归类型

Typescript 错误作为警告

javascript - RxJS:如何发出 takeWhile 评估为 false 的事件?

javascript - Three.js 单个对象上的多个 UV 贴图

javascript - 我怎样才能听到输入的变化然后改变文本?

javascript - 以 react 形式将 firebase.firestore.timestamp 转换为数据的 patchValue 之前的日期

reactjs - 为我的 React typescript 组件库生成/维护 typescript 定义文件