node.js - Node 本地依赖项安装为快捷方式并嵌套而不是平面

标签 node.js react-native npm

这似乎是在我更新node/npm时开始的,但直到现在我才意识到我必须删除并重新创建我的node_modules文件夹。

我有一个 React Native 项目,其中包含核心模块和一个用于展示该模块的示例项目。示例项目在我的 package.json 中引用了这样的模块:

  "dependencies": {
    "module-core": "file:../core"
  },

当我在示例项目中运行 npm install 时,我得到了这个 nodule_module 结构:

  • Node 模块
    • 核心
    • core_dependency_1
    • core_dependency_2

现在,我明白了:

  • Node 模块
    • 核心
      • Node 模块
        • core_dependency_1
        • core_dependency_2

起初我认为这与 PeerDepcies 以及 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 和 Node 8.8.1。以前我有 Node 7.4.0。

是否有任何标志或方法可以让 npm 安装 localDependency 并且不将其视为快捷方式?

最佳答案

我终于找到答案了。 Npm 版本 5 确实改变了本地依赖项的处理方式,它只是创建了 npm link,在 Windows 中创建符号链接(symbolic link)或快捷方式。

您可以通过以下方式完成与以前相同的行为:

npm install $(npm pack <folder> | tail -1)

在 Windows 10 中使用 git-bash 为我工作

我的最终解决方案是在使用核心的示例项目中包含此 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 文件提交到存储库。

关于node.js - Node 本地依赖项安装为快捷方式并嵌套而不是平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47420244/

相关文章:

javascript - 如何对对象数组进行排序?

django - LoginRequiredMixin 失败但用户已通过身份验证

android - 在同一代码库中使用 Android 和 iOS 代码编写 React Native?

node.js - 如何列出一个 npm 模块的所有版本?

typescript - NPM 仅安装后依赖项

javascript - 咕噜.js : Loading task causes TypeError: object is not a function

javascript - 带有 $near $ 或其他字段的 Mongoose 查询

javascript - 使用 Mongoose 验证电子邮件唯一性的正确方法是什么?

javascript - Webpack 在 bundle 中包含自己的依赖项

node.js - Node 服务器在永远停止后运行