Webpack:读取本地节点模块以获得依赖性

时间:2018-06-21 14:32:24

标签: node.js reactjs webpack

我已经安装了两个依赖项A和B。两者都使用了另一个依赖项C。但是A需要不同的C版本,而B需要不同的版本。 NPM通过将'C'依赖项安装到B的本地node_modules来处理它。

 Main path -> node_modules -> A, C with different version(parallel to A path),
 B -> node_modules -> C with different version(inside node_modules of B dependency).

NPM可以很好地解决此问题,但是由于webpack配置,出现了问题。在我的情况下,这两个依赖关系都在拾取/读取外部依赖关系,即与A和B并行,这对A起作用,但需要在其本地node_modules内部进行依赖。

我们编写绝对路径,然后webpack将其转换为相对路径。我不确定是什么原因引起的。

1 个答案:

答案 0 :(得分:0)

因此,在花了一整天的时间后,我找到了解决方案。

原因:

基本上,问题是我正在通过将它们解析为我的应用程序目录路径来传递node_modules路径

package example;

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger;

public class Hello {
    public String myHandler(int myCount, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("received : " + myCount);
        return String.valueOf(myCount);
    }
}

因此,在这种情况下,正常的Node解析机制在依赖冲突时不起作用,并且在每种情况下都可以解析为外部模块。

解决方案:

将webpack解析的example.Hello::myHandler 更改为以下代码

const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);

paths.appModules = resolveApp('node_modules');
paths.appSrc = resolveApp('src');

 module.exports = {
   ....

   modules: [paths.appModules, paths.appSrc].concat(
      // It is guaranteed to exist because we tweak it in `env.js`
      process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
   ),
  ...
}

希望这会帮助某人!!!