当解析和缓存模块时,命令模块加载器保持符号连接。

    默认情况下,当 Node.js 从一个被符号连接到另一块磁盘位置的路径加载一个模块时,Node.js 会解引用该连接,并使用模块的真实磁盘的实际路径,作为定位其他依赖模块的标识符和根路径。 大多数情况下,默认行为是可接受的。 但是,当使用符号连接的同行依赖,如下例子所描述的,如果 moduleA 试图引入 moduleB 作为一个同行依赖,默认行为就会抛出异常:

    1. {appDir}
    2. ├── app
    3. ├── index.js
    4. └── node_modules
    5. ├── moduleA -> {appDir}/moduleA
    6. └── moduleB
    7. ├── index.js
    8. └── package.json
    9. └── moduleA
    10. ├── index.js
    11. └── package.json

    --preserve-symlinks 命令行标志命令 Node.js 使用模块的符号路径而不是真实路径,是符号连接的同行依赖能被找到。

    注意,使用 --preserve-symlinks 会有其他方面的影响。 比如,如果符号连接的原生模块在依赖树里来自超过一个位置,它们会加载失败。 (Node.js 会将它们视为两个独立的模块,且会试图多次加载模块,造成抛出异常。)

    --preserve-symlinks 标志不适用于主模块,它允许 node --preserve-symlinks node_module/.bin/<foo> 工作。 要对主模块应用相同的行为,也可使用 --preserve-symlinks-main