这似乎是在我更新node / npm时开始的,但直到现在我还没有意识到我必须删除并重新创建我的node_modules文件夹。
我有一个React Native项目,它有一个核心模块和一个Example项目来展示模块。示例项目在我的package.json中引用了这样的模块:
"dependencies": {
"module-core": "file:../core"
},
当我在Examples项目中运行npm install时,我得到了这个nodule_module结构:
现在,我明白了:
起初我认为它与peerDepencies有关,以及npm如何处理平面/嵌套依赖项,但我已经检查过,现在看来核心文件夹现在是一个快捷方式(我正在使用Windows)。
这打破了我的gradle脚本,因为有些脚本被引用如下:
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
我可以通过重命名链接来修复此问题,但这会使构建平台/环境依赖。
它还打破了其他一些脚本:
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
这是因为project()解析为我的根文件夹,现在我也无法使用它。
我正在使用npm 5.4.2和节点8.8.1。以前我有节点7.4.0。
是否有任何标志或方法使npm安装localDependency而不将其视为快捷方式?
答案 0 :(得分:0)
我终于找到了答案。 Npm Version 5确实改变了本地依赖关系的处理方式,它只是创建了npm链接,它在windows中创建了符号链接或快捷方式。
您可以使用此方法完成与以前相同的行为:
npm install $(npm pack <folder> | tail -1)
使用git-bash在Windows 10中为我工作
我的最终解决方案是在使用核心的Example项目中使用这个package.json:
{
"name": "core-examples",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"preinstall": "npm pack ../Core | tail -1",
},
"dependencies": {
"core": "file:core-0.0.0.tgz"
},
"jest": {
"preset": "react-native"
}
}
预安装脚本将生成tgz文件,然后您可以照常安装。这将避免必须将tgz文件提交到存储库。