loader-utils

中文文档
3.3.1发布于 2024/06/05MITCommonJS零依赖近 30 天下载 2.1亿

装入网络包装器的提法

中文使用文档
文档目录5 节
  1. 方法
  2. urlToRequest
  3. interpolateName
  4. getHashDigest
  5. 许可证

装入器

方法

urlToRequest

将一些资源 URL 转换为 Webpack 模块请求 .

电话之前 urlToRequest 你需要打电话 isUrlRequest 确保它是可请求的 url

const url = "path/to/module.js";

if (loaderUtils.isUrlRequest(url)) {
  // Logic for requestable url
  const request = loaderUtils.urlToRequest(url);
} else {
  // Logic for not requestable url
}

简单示例 :

const url = "path/to/module.js";
const request = loaderUtils.urlToRequest(url); // "./path/to/module.js"

模块 URL

包含一个 ~ 将解释为模块请求。 之后的任何东西 ~ 将被视为请求路径.

const url = "~path/to/module.js";
const request = loaderUtils.urlToRequest(url); // "path/to/module.js"

根相对 URL

根相对的 URL( 从开始) /) 可以通过使用 root 参数 :

const url = "/path/to/module.js";
const root = "./root";
const request = loaderUtils.urlToRequest(url, root); // "./root/path/to/module.js"

要将根相通的 URL 转换成模块 URL,请指定 root 起始值 ~数字 :

const url = "/path/to/module.js";
const root = "~";
const request = loaderUtils.urlToRequest(url, root); // "path/to/module.js"

interpolateName

使用多个占位符和/或正则表达式将文件名模板国际化. 模板和正则表达式设定为调用查询参数 name 财务报告和审定财务报表 regExp 关于当前加载器上下文.

const interpolatedName = loaderUtils.interpolateName(
  loaderContext,
  name,
  options
);

以下符号在 name 参数 :

  • [ext] 资源扩展
  • [name] 资源的基准名称
  • [path] 相对 context 查询参数或选项.
  • [folder] 资源所在的文件夹
  • [query] 资源查询,即. ?foo=bar
  • [contenthash] 草丛 options.content (Buffer) (默认是Hex的文摘) xxhash64 散列( hash)
  • [<hashType>:contenthash:<digestType>:<length>] 可选择配置
    • 其他项目 hashTypei. e. (中文(简体) ). xxhash64, (中文(简体) ), sha1, (中文(简体) ), md4 (wasm版本), native-md4 (单位:千美元)crypto 模块版本),, md5, (中文(简体) ), sha256, (中文(简体) ), sha512
    • 其他项目 digestTypei. e. (中文(简体) ). hex, (中文(简体) ), base26, (中文(简体) ), base32, (中文(简体) ), base36, (中文(简体) ), base49, (中文(简体) ), base52, (中文(简体) ), base58, (中文(简体) ), base62, (中文(简体) ), base64, (中文(简体) ), base64safe
    • 财务报告和审定财务报表 length 字符中的长度
  • [hash] 草丛 options.content (Buffer) (默认是Hex的文摘) xxhash64 散列( hash)
  • [<hashType>:hash:<digestType>:<length>] 可选择配置
    • 其他项目 hashTypei. e. (中文(简体) ). xxhash64, (中文(简体) ), sha1, (中文(简体) ), md4 (wasm版本), native-md4 (单位:千美元)crypto 模块版本),, md5, (中文(简体) ), sha256, (中文(简体) ), sha512
    • 其他项目 digestTypei. e. (中文(简体) ). hex, (中文(简体) ), base26, (中文(简体) ), base32, (中文(简体) ), base36, (中文(简体) ), base49, (中文(简体) ), base52, (中文(简体) ), base58, (中文(简体) ), base62, (中文(简体) ), base64, (中文(简体) ), base64safe
    • 财务报告和审定财务报表 length 字符中的长度
  • [N] 从匹配当前文件名获取的 N 匹配 options.regExp

在加载器上下文 [hash] 财务报告和审定财务报表 [contenthash] 都一样 但我们建议使用 [contenthash] 为了避免误导.

digestType 与 base64safe 不包含 /, (中文(简体) ), + 财务报告和审定财务报表 = 符号.

实例

// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
loaderUtils.interpolateName(loaderContext, "js/[hash].script.[ext]", { content: ... });
// => js/9473fdd0d880a43c21b7778d34872157.script.js

// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
// loaderContext.resourceQuery = "?foo=bar"
loaderUtils.interpolateName(loaderContext, "js/[hash].script.[ext][query]", { content: ... });
// => js/9473fdd0d880a43c21b7778d34872157.script.js?foo=bar

// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
loaderUtils.interpolateName(loaderContext, "js/[contenthash].script.[ext]", { content: ... });
// => js/9473fdd0d880a43c21b7778d34872157.script.js

// loaderContext.resourcePath = "/absolute/path/to/app/page.html"
loaderUtils.interpolateName(loaderContext, "html-[hash:6].html", { content: ... });
// => html-9473fd.html

// loaderContext.resourcePath = "/absolute/path/to/app/flash.txt"
loaderUtils.interpolateName(loaderContext, "[hash]", { content: ... });
// => c31e9820c001c9c4a86bce33ce43b679

// loaderContext.resourcePath = "/absolute/path/to/app/img/image.png"
loaderUtils.interpolateName(loaderContext, "[sha512:hash:base64:7].[ext]", { content: ... });
// => 2BKDTjl.png
// use sha512 hash instead of xxhash64 and with only 7 chars of base64

// loaderContext.resourcePath = "/absolute/path/to/app/img/myself.png"
// loaderContext.query.name =
loaderUtils.interpolateName(loaderContext, "picture.png");
// => picture.png

// loaderContext.resourcePath = "/absolute/path/to/app/dir/file.png"
loaderUtils.interpolateName(loaderContext, "[path][name].[ext]?[hash]", { content: ... });
// => /app/dir/file.png?9473fdd0d880a43c21b7778d34872157

// loaderContext.resourcePath = "/absolute/path/to/app/js/page-home.js"
loaderUtils.interpolateName(loaderContext, "script-[1].[ext]", { regExp: "page-(.*)\\.js", content: ... });
// => script-home.js

// loaderContext.resourcePath = "/absolute/path/to/app/js/javascript.js"
// loaderContext.resourceQuery = "?foo=bar"
loaderUtils.interpolateName(
  loaderContext,
  (resourcePath, resourceQuery) => {
    // resourcePath - `/app/js/javascript.js`
    // resourceQuery - `?foo=bar`

    return "js/[hash].script.[ext]";
  },
  { content: ... }
);
// => js/9473fdd0d880a43c21b7778d34872157.script.js

getHashDigest

const digestString = loaderUtils.getHashDigest(
  buffer,
  hashType,
  digestType,
  maxLength
);
  • buffer 应散列的内容
  • hashType 一个 xxhash64, (中文(简体) ), sha1, (中文(简体) ), md4, (中文(简体) ), md5, (中文(简体) ), sha256, (中文(简体) ), sha512 或任何其他节点.js 支持散列类型
  • digestType 一个 hex, (中文(简体) ), base26, (中文(简体) ), base32, (中文(简体) ), base36, (中文(简体) ), base49, (中文(简体) ), base52, (中文(简体) ), base58, (中文(简体) ), base62, (中文(简体) ), base64, (中文(简体) ), base64safe
  • maxLength 字符的最大长度

许可证

麻省理工学院http://www.opensource.org/licenses/mit-license.php 页面存档备份,存于互联网档案馆(中文(简体) )

版本与发布记录

loader-utils 共发布 50 个版本,首次发布于 2012/11/02;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.3.1latest2024/06/052 年前
3.3.02024/06/052 年前
3.2.22024/05/302 年前
1.4.2version-12022/11/113 年前
2.0.4version-22022/11/113 年前
3.2.12022/11/113 年前

关于 loader-utils 的常见问题

loader-utils 是什么?

装入网络包装器的提法

如何安装 loader-utils?

在项目目录运行 npm install loader-utils,或使用 pnpm add / yarn add / bun add。

loader-utils 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/loader-utils 是否存在。

loader-utils 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

loader-utils 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 12.13.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

loader-utils 可以商用吗?

loader-utils 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

loader-utils 的下载量有多少?

根据 npm 官方下载统计,loader-utils 在 2026/10/05 – 2026/11/03 这 30 天内被下载 212,299,027 次,日均约 7,076,634 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

loader-utils 还在维护吗?

最新版本 3.3.1 发布于 2024/06/05(2 年前);至今共发布 50 个版本,其中过去 12 个月发布了 0 个;首次发布于 2012/11/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。