ChatGPT解决这个技术问题 Extra ChatGPT

如何将本地模块指定为 npm 包依赖项

我有一个应用程序,它具有依赖关系下 package.json 文件中指定的第三方模块(例如“express”)的通常依赖项集。例如

"express"     : "3.1.1"

我想模块化地构建我自己的代码,并通过 package.json 安装一组本地(即在我当前所在的文件系统上)模块。我知道我可以通过运行来安装本地模块:

npm install path/to/mymodule

但是,我不知道如何通过 package.json 依赖结构来实现这一点。在此命令中使用 --save 选项只是将 "mymodule": "0.0.0" 放入我的 package.json(不引用文件路径位置)。如果我然后从 node_modules 中删除已安装的版本,并尝试从 package.json 重新安装,它会失败(因为它在中央注册表中查找“mymodule”,而不是在本地查找)。

我确信这是一种告诉 "dependencies": {} 结构我希望它从文件系统路径安装的方式,但不知道如何。

还有其他人有这个问题吗?谢谢。

一个非常好的问题。遗憾地意识到 package.json 没有与我们在 Gemfile 中的功能等效的功能。

A
Anjum....

npm install 现在支持这个

npm install --save ../path/to/mymodule

为此,必须将 mymodule 配置为具有自己的 package.json 的模块。请参阅Creating NodeJS modules

从 npm 2.0 开始,本机支持本地依赖项。请参阅danilopopeye's answer to a similar question。我在这里复制了他的回答,因为这个问题在网络搜索结果中排名很高。

此功能在 npm 的 2.0.0 版本中实现。例如:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

以下任何路径也是有效的:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

同步更新

由于 npm install <folder> 将目录中的包作为符号链接添加到当前项目中,因此对本地包的任何更改都会自动同步。


这对我有用。 (我只是做了一个像 "mymodule":"file:mymoduledir" 这样的本地相对路径
npm install --save ../my-local-repo
以及如何在项目中使用它?我试图将其称为 import { HelloWorld } from "my-test-lib";,但我收到“找不到模块”错误。请看一下stackoverflow.com/questions/46818083/…
@LucioMollinedo 你能分享你如何导入本地模块的语法吗?与 Vitallii 一样,我收到 import { HelloWorld } from "my-test-lib"; 的“无法正常模块”错误
这与引用包不同,因为依赖项不会安装到项目中
g
gman

请参阅:Local dependency in package.json

看起来答案是 npm linkhttps://docs.npmjs.com/cli/link


实际上 npm link 只会创建符号链接,不会修改 package.json 来添加本地依赖
但是,如果它不是 symlink,那么一旦依赖项完成构建,父项目将如何知道重新构建?
S
Sam Adams

最后我找不到一个简洁的方法,所以我去创建一个名为 local_modules 的目录,然后将此 bashscript 添加到脚本中的 package.json -> preinstall

#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f "${packageJson}" ]; then
        echo "installing ${i}..."
        npm install "${i}"
    fi
done

C
Clay Bridges

在使用 npm link 命令(开发本地模块而不将它们发布到注册表或在 node_modules 文件夹中维护单独副本的建议解决方案)苦苦挣扎之后,我构建了一个小型 npm 模块来帮助解决这个问题。

修复需要两个简单的步骤。

第一的:

npm install lib-manager --save-dev

其次,将此添加到您的 package.json

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

https://www.npmjs.com/package/lib-manager 提供更多详细信息。希望它可以帮助某人。


j
joe abou nakkoul

你可以在你的项目中添加到你的 package.json 文件中

"package-name" : "path/to/package"

然后在您的项目中运行 npm i


P
Plato

如果可以简单地将预先安装在 node_modules 中的模块与其他文件一起发布是可以接受的,则可以这样做:

// ./node_modules/foo/package.json
{ 
  "name":"foo",
  "version":"0.0.1",
  "main":"index.js"
}

// ./package.json
...
"dependencies": {
  "foo":"0.0.1",
  "bar":"*"
}

// ./app.js
var foo = require('foo');

您可能还想将您的模块存储在 git 上并告诉您的父 package.json 从 git 安装依赖项:https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies


不幸的是,这将涉及 node_modules 将我的本地模块和第三方/贡献的模块从注册表(例如连接)安装在同一目录中。除了从 Git/VCS 的角度来看令人困惑之外(即必须忽略 node_modules 中的所有内容,除了我创建的那些),这也是不好的做法(那些我写的但没有发布的应该与其他人写的和发布的分开)。
当我添加一个本地模块然后进行更改时,我的主应用程序看不到这些。为什么会这样?
J
Joshua Goldstein

在工作中,我们有一个公共库,供几个不同的项目使用,它们都在一个存储库中。最初我们使用已发布的(私有)版本(npm install --save rp-utils),但这会导致我们在开发过程中进行大量不必要的版本更新。该库位于应用程序的姊妹目录中,我们可以使用相对路径而不是版本。而不是 package.json 中的 "rp-utils": "^1.3.34" 现在是:

{ 
  "dependencies": { ...
    "rp-utils": "../rp-utils",
   ...

rp-utils 目录包含一个可发布的 npm 包


每次更改 rp-utils 时都需要执行 npm install 吗?
每当您更改导入的包时,您都需要重新构建它,然后在使用它的应用程序中npm update rp-utils更新该依赖项。
w
wasserholz

使用本地安装

我遇到了来自本地依赖项的冲突反应安装问题。我通过使用 local-install npm 包解决了该错误。这个包不创建符号链接,这解决了我的问题。

脚步:

在目标存储库中运行 npm i -g local-install 运行 npx install-local --save 以安装本地依赖项

进一步阅读:https://www.npmjs.com/package/install-local

我在尝试使用 npm install --save <local-directory> 安装本地软件包时收到的错误:

错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能是由于以下原因之一: 您可能有不匹配的 React 版本和渲染器(例如 React DOM) 您可能违反了 Hooks 规则 您可能在同一个应用程序中拥有多个 React 副本


npm i install-local 不是本地安装
npx install-local 是正确的命令。我把话翻了。