You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否声明依赖跟踪传递依赖版本?Eleventy与slugify版本同步问题

解决方案:自动同步Eleventy依赖的slugify版本

针对你需要让@sindresorhus/slugify版本始终匹配Eleventy所用版本的需求,有以下几种可行方案:

方案一:自动同步版本的npm脚本(推荐)

写一个简单的Node.js脚本,自动提取Eleventy依赖的slugify版本并更新项目的直接依赖,彻底避免手动同步:

  1. 在项目根目录创建sync-slugify.js文件,内容如下:
const fs = require('fs');
const path = require('path');

try {
  // 读取Eleventy的package.json文件
  const eleventyPkgPath = path.join(__dirname, 'node_modules', '@11ty', 'eleventy', 'package.json');
  const eleventyPkg = JSON.parse(fs.readFileSync(eleventyPkgPath, 'utf8'));

  // 获取Eleventy使用的slugify版本
  const targetVersion = eleventyPkg.dependencies['@sindresorhus/slugify'];
  if (!targetVersion) {
    throw new Error('Eleventy does not depend on @sindresorhus/slugify');
  }

  // 读取项目自身的package.json
  const projectPkgPath = path.join(__dirname, 'package.json');
  const projectPkg = JSON.parse(fs.readFileSync(projectPkgPath, 'utf8'));

  // 更新直接依赖的slugify版本
  if (!projectPkg.dependencies) projectPkg.dependencies = {};
  projectPkg.dependencies['@sindresorhus/slugify'] = targetVersion;

  // 写回package.json(保持格式缩进)
  fs.writeFileSync(projectPkgPath, JSON.stringify(projectPkg, null, 2) + '\n');
  console.log(`✅ Synced @sindresorhus/slugify to version ${targetVersion} (matches Eleventy)`);
} catch (err) {
  console.error('❌ Failed to sync slugify version:', err.message);
}
  1. 在package.json的scripts中添加两个命令:
"scripts": {
  "sync-slugify": "node sync-slugify.js",
  "preinstall": "npm run sync-slugify"
}

这样每次执行npm install时,脚本会自动运行并同步版本。你更新Eleventy后,只需重新执行npm install就能自动同步slugify的版本,完全不用手动修改版本号。

方案二:使用npm Overrides强制统一版本(npm 8.3+)

如果你的项目使用npm 8.3及以上版本,可以通过overrides字段强制项目中所有依赖使用Eleventy的slugify版本,结合上面的脚本效果更佳:

  1. 先运行一次sync-slugify脚本同步版本,然后在package.json中添加:
"overrides": {
  "@sindresorhus/slugify": "$@sindresorhus/slugify"
}

这个配置会强制所有依赖(包括你的直接依赖和其他间接依赖)使用你项目中指定的slugify版本,而你项目的版本已经通过脚本同步为Eleventy的版本,从根源上保证版本一致性。

方案三:直接从Eleventy的依赖路径导入(不推荐)

作为临时应急方案,你可以直接从Eleventy的node_modules路径导入slugify:

const slugify = require('@11ty/eleventy/node_modules/@sindresorhus/slugify');

但这种方式依赖npm的依赖扁平化策略,一旦Eleventy的依赖结构变化或npm调整安装逻辑,可能会导致导入失败,因此不推荐长期使用。


内容的提问来源于stack exchange,提问作者Ben Blank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:46:14