fen*_*mas 2 javascript npm peer-dependencies
我正在尝试使用 npmpeerDependencies但似乎没有像广告中那样工作。我缺少什么?
设置是,我有两个模块mod和plugin,这两个模块都依赖于 npm 的外部模块。mod声明对外部模块的硬依赖plugin,并且插件声明对等依赖,以便访问父模块正在使用的版本。
这些文件看起来像这样:
~/plugin/package.json:
    {
      "name": "plugin",
      "version": "1.0.0",
      "main": "index.js",
      "peerDependencies": {
        "pad-right": "^0.2.2"
      }
    }
~/plugin/index.js
    var peerDependency = require('pad-right')
    module.exports = 'this is a plugin'
~/mod/package.json:
    {
      "name": "mod",
      "version": "1.0.0",
      "main": "index.js",
      "dependencies": {
        "pad-right": "^0.2.2",
        "plugin": "../plugin"
      }
    }
~/mod/index.js:
    var hardDependency = require('pad-right')
    var plugin = require('plugin')
Run Code Online (Sandbox Code Playgroud)
据我从文档和示例中理解,我认为这应该是使用对等依赖项的标准方法,并且npm install在任一目录中运行都不会给出任何错误或警告。
但是,当我在mod文件夹中运行 webpack 时,出现如下错误:
~/plugin/package.json:
    {
      "name": "plugin",
      "version": "1.0.0",
      "main": "index.js",
      "peerDependencies": {
        "pad-right": "^0.2.2"
      }
    }
~/plugin/index.js
    var peerDependency = require('pad-right')
    module.exports = 'this is a plugin'
~/mod/package.json:
    {
      "name": "mod",
      "version": "1.0.0",
      "main": "index.js",
      "dependencies": {
        "pad-right": "^0.2.2",
        "plugin": "../plugin"
      }
    }
~/mod/index.js:
    var hardDependency = require('pad-right')
    var plugin = require('plugin')
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题,webpack 不应该plugin用父mod模块的对等依赖来解析内部的 require 语句吗?
啊,看起来这是一种边缘情况,仅影响通过文件系统在本地相互引用的模块。
解决方案显然是添加类似以下内容:
    resolve: {
        alias: {
            'pad-right': path.resolve('node_modules', 'pad-right'),
        },
    },
Run Code Online (Sandbox Code Playgroud)
到你的 webpack 配置。(或者尝试resolve.symlinks: false,它解决了我发布的最小重现代码中的问题,但不能解决我实际项目中的问题)。