我已经安装了两个依赖项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将其转换为相对路径。我不确定是什么原因引起的。
答案 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)
),
...
}
希望这会帮助某人!!!