# @carimus/metro-symlinked-deps 中文文档

规范地址：https://npmcn.com/package/%40carimus/metro-symlinked-deps/

版本：1\.1\.0
npm 元数据更新时间：2025-05-28T17:44:17.886Z
中文译文更新时间：2026-11-09T20:52:29.792Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40carimus/metro-symlinked-deps
原文对照：https://npmcn.com/package/%40carimus/metro-symlinked-deps/?lang=original
项目主页：https://github.com/Carimus/metro-symlinked-deps#readme
源码仓库：https://github.com/Carimus/metro-symlinked-deps

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：29.1 kB，11 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=8
- 运行依赖：5 个
- 首次发布：2019-09-27T18:53:26.478Z
- 最新版本发布：2019-10-01T14:27:00.568Z
- 近 30 天下载量：1735（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：3（近 12 个月 0 个）

## 中文简介

Metro 捆绑器配置工具 来解决缺乏共通支持的问题 .

## 安装

```sh
npm install @carimus/metro-symlinked-deps
```

也可以使用：`pnpm add @carimus/metro-symlinked-deps`、`yarn add @carimus/metro-symlinked-deps`、`bun add @carimus/metro-symlinked-deps`

## README

# `@carimus/metro-symlinked-deps`

定制公用事业 [`metro`](https://github.com/facebook/metro) 捆绑器配置以进行工作 缺乏对同义词的支持.

本软件包的主要使用例是,使用 `yarn link` 或者说 `npm link`。 。 。 .

## 动机

脸书 [`metro`](https://github.com/facebook/metro) 由 React 本地用户使用的捆绑器 [不支持符号链接](https://github.com/facebook/metro/issues/1) 这是阻碍我们 本地共享代码.

关系和依赖 [这个问题与 `jest`](https://github.com/facebook/jest/pull/7549) 自此以来 `metro` 用途 `jest-haste-map` 内部可跟踪和监视文件更改.

与主要应用共享组件的依赖性发展的一般过程是: 用于 `yarn link` 编号 : `npm link` 将依赖性链接到应用程序中 `node_modules`。因为Metro忽略了符号链接 但是,它只是不工作 在盒子与地铁。 有很多工作环绕着这 工作到不同 学位。 这是为我们效劳的,我们要重新使用,直到不必要.

## 使用量

使用 `npm` 或者说 `yarn`数字 :

```shell
yarn add --dev @carimus/metro-symlinked-deps
```

### 备选案文1:自动

如果你不需要更大的控制 `resolver.blacklistRE` 在添加路径或表达式到 列表,您可以安全使用单曲 `applyConfigForLinkedDependencies` 函数将使用 `metro-config`是因为 `mergeConfig` 在配置更新中合并 `resolver.blacklistRE` 财务报告和审定财务报表 `watchFolders`。 。 。 .

1.  修改您的 `metro.config.js` (如果它不存在,创建它, 或转换你的 `metro.config.json` 改为 `metro.config.js` 要求和呼吁 `applyConfigForLinkedDependencies` 已存在的 配置 :
    
    ```javascript
    const {
        applyConfigForLinkedDependencies,
    } = require('@carimus/metro-symlinked-deps');
    
    module.exports = applyConfigForLinkedDependencies(
        {
            /* Your existing configuration, optional */
        },
        {
            /* Options to pass to applyConfigForLinkedDependencies, optional */
        },
    );
    ```
    

`applyConfigForLinkedDependencies` 选择以下选项:

-   `projectRoot` (单位:千美元)`string`选项 **但建议**:地铁捆绑项目的根. 如果不提供,则 将检测到当前 `process.cwd()` 是工程根。 建议明确提供 这是为了避免发现问题.
-   `blacklistLinkedModules` (单位:千美元)`string[]`,默认为 `[]`: 如果显示于 任何关联的依赖关系' `node_modules`。如果获得某些模块的相撞命名,请添加这些模块 在此按名称启动捆绑器 `--reset-cache`。常见的是 `react-native` 通常会 在反应原生包中显示为dev依赖,因为它被用于测试.
-   `blacklistDirectories` (单位:千美元)`string[]`,默认为 `[]`: 绝对或相对的列表(至 `projectRoot`) 目录 除通过 `blacklistLinkedModules`。 。 。 .
-   `resolveBlacklistDirectoriesSymlinks` (单位:千美元)`boolean`,默认为 `true`: 是否在 处理 `blacklistDirectories`。 。 。 .
-   `additionalWatchFolders` (单位:千美元)`string[]`,默认为 `[]`: 额外的绝对路径列表以观看,并合并 直接进入 `watchFolders` 选项.
-   `resolveAdditionalWatchFoldersSymlinks` (单位:千美元)`boolean`,默认为 `true`: 是否在 处理 `additionalWatchFolders`。 。 。 .
-   `resolveNodeModulesAtRoot` (单位:千美元)`boolean`,默认为 `false`: 设定为 `true` 设置代理服务器 `resolver.extraNodeModules` 以确保所有模块(即使是关联依赖关系或 将解决项目根的 `node_modules` 目录。 这主要是 如果链接的依赖依赖于项目根中安装的对等依赖的存在,则有用.
-   `silent` (单位:千美元)`boolean`,默认为 `false`: 设定为 `true` 在显示的捆绑器中压制警告输出 当检测到关联的依赖性时上.
-   `debug` (单位:千美元)`boolean`,默认为 `false`: 设定为 `true` 以登录像 final 这样的有价值的调试信息 合并地铁配置.

#### 示例

此设置将适用于框外的响应- 本地 0. 60+ 项目 :

```javascript
const {
    applyConfigForLinkedDependencies,
} = require('@carimus/metro-symlinked-deps');

module.exports = applyConfigForLinkedDependencies(
    {
        transformer: {
            getTransformOptions: async () => ({
                transform: {
                    experimentalImportSupport: false,
                    inlineRequires: false,
                },
            }),
        },
    },
    {
        projectRoot: __dirname,
        blacklistLinkedModules: ['react-native'],
    },
);
```

### 备选案文2:手工

开始

## 洞穴

-   在编写本报告时,黑名单办法似乎可以纠正命名相撞错误,但它要求 开发者知道哪些软件包是通用的,并且他们向这个软件包提供该列表,以便 生成正则表达式
-   命名碰撞似乎并不发生在所有常见的包上. 不清楚,如果它也考虑 版本也一样,虽然这有道理.

## 如何运作

这是一种变通做法,因此它是通过逐步解决出现的错误而建立的.

### 错误 1 : 未找到模块

从框外出, 如果您尝试使用对称的依赖, 您会在捆绑器上获得以下错误 构建捆绑( 在转换步骤中未打开) :

```
error: bundling failed: Error: Unable to resolve module `your-symlinked-module` from `/path/in/project/that/requires/the/module.js`: Module `your-symlinked-module` does not exist in the Haste module map

This might be related to https://github.com/facebook/react-native/issues/4968
To resolve try the following:
  1. Clear watchman watches: `watchman watch-del-all`.
  2. Delete the `node_modules` folder: `rm -rf node_modules && npm install`.
  3. Reset Metro Bundler cache: `rm -rf /tmp/metro-bundler-cache-*` or `npm start -- --reset-cache`.
  4. Remove haste cache: `rm -rf /tmp/haste-map-react-native-packager-*`.
```

不太有帮助 但这里发生的事是 `metro` 完全忽略了连锁关系 如此,你 模块对它来说是无形的.

这里的工作是由 [`aleclarson`](https://github.com/aleclarson) 内 [本评论 `metro` 问题](https://github.com/facebook/metro/issues/1#issuecomment-421628147) 改为 用他亲生的 `get-dev-paths` 搜索的软件包 `node_modules` 对于任何关联的依赖关系 以 `dependencies` 在你身边 `package.json`,解决与真正依赖关系的联系,然后 叫地铁也看那些真正的目录.

### 出错 2: 命名相撞的仓促模块

这一点很有用,但有一个重要的告诫:如果联系到的依赖性在它中有任何安装的依赖性 `node_modules` 与 root 工程中安装的依赖性完全相同,但获得以下错误 (此错误名称) `react-native` 作为共同的依赖关系).

```
jest-haste-map: Haste module naming collision: react-native
  The following files share their name; please adjust your hasteImpl:
    * <rootDir>/node_modules/react-native/package.json
    * <rootDir>/../../your-symlinked-module/node_modules/react-native/package.json
```

当您的依赖被合法安装( 而非连接) 时, 任何共同的依赖都会自动被解去 安装期间( 期间) `yarn install` 或者说 `npm install`和 `metro` (或者说 `jest-haste-map`似乎依赖 无法识别两个包之间没有冲突 完全一样 可惜没有办法说 `metro` 情况就是这样,它应当作为 例如,更喜欢根工程中的代码版本 `node_modules` 因此,我们必须手动构建 在链接的依赖中构建一个正则表达式的黑名单 手持正则表达式 `blacklistRE` 选择地铁捆绑器 `resolver` 相会.

## 开始

-   [ ] 删除 `resolveNodeModulesAtRoot` 改为: `nodeModulesResolutionStrategy` 有三种选择:
    -   `null`: 默认,不应用任何 `extraNodeModules` 配置
    -   `'peers'`: 应用 `extraNodeModules` 将自动检测链接道口中的端点依赖性并确保 在项目根部中解决了这些问题,同时允许所有其他依赖性自然解决.
    -   `'root'`: 应用 `extraNodeModules` 将强制所有节点模块在工程根中解决,等同 改为 `resolveNodeModulesAtRoot` 设定为 `true` 现在.

## 常见问题

### @carimus/metro-symlinked-deps 是什么？

Metro 捆绑器配置工具 来解决缺乏共通支持的问题 \.

### 如何安装 @carimus/metro-symlinked-deps？

在项目目录运行 npm install @carimus/metro-symlinked-deps，或使用 pnpm add / yarn add / bun add。

### @carimus/metro-symlinked-deps 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/carimus\_\_metro-symlinked-deps 是否存在。

### @carimus/metro-symlinked-deps 支持 ESM 还是 CommonJS？

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

### @carimus/metro-symlinked-deps 需要什么版本的 Node\.js？

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

### @carimus/metro-symlinked-deps 可以商用吗？

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

### @carimus/metro-symlinked-deps 的下载量有多少？

根据 npm 官方下载统计，@carimus/metro-symlinked-deps 在 2026/10/09 – 2026/11/07 这 30 天内被下载 1,735 次，日均约 58 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @carimus/metro-symlinked-deps 还在维护吗？

最新版本 1\.1\.0 发布于 2019/10/01（7 年前）；至今共发布 3 个版本，其中过去 12 个月发布了 0 个；首次发布于 2019/09/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

