我的问题与此类似。
项目依赖于位于私有托管存储库中的 Git 模块:
"dependencies": {
"mymod": "git+https://mygitserver:8443/scm/od/mymod.git",
...
}
Run Code Online (Sandbox Code Playgroud)
目的是使其成为快照依赖项,因此每当mymod修改任何代码时,项目都会下载最新版本。
问题是,我应该正确使用什么命令将我的项目更新到模块的最新版本?
我发现唯一有效的是:
rm -rf node_modules/mymod
npm install
Run Code Online (Sandbox Code Playgroud)
npm install正如@Vishwanath 在他的问题中指出的那样,单独运行什么都不做(假设它已经运行过一次),因为该模块已经安装。npm upgrade是不合适的,因为我也有很多其他模块的依赖,我不想把它们都升级到新版本。
我想我可以明确版本mymod,然后package.json在新版本发生变化时用新版本更新我的本地,但这会创建一个持续的维护任务。
它似乎npm有足够的信息来确定何时需要升级,因为node_modules/mymod/package.json包含最后一个已知的主修订,它可以与当前的主修订进行比较:
"gitHead": "b63f0df8ef...",
"_resolved": "git+https://mygitserver:8443/scm/od/mymod.git#b63f0df8ef..."
Run Code Online (Sandbox Code Playgroud)
是否npm有处理这样的快照依赖项的首选方法?
use*_*345 13
您可以手动更新包。
npm update mymod
Run Code Online (Sandbox Code Playgroud)
这将使用最新的哈希提交更新您的 package-lock.json。
Art*_*mix 11
更新 - 2021 - 开发和生产中的私有包
在我的新项目中,我尽我最大的努力编写代码以适应生产和开发的最小变化,使用我的私有包是挑战之一。
我想在我的包上本地工作,这样所有更改都会立即应用,而无需像下面的解决方案一样每次手动更新我的包,但在生产中,我希望它从我的 git 安装特定版本的包时我愿意npm install。
所以我所做的是使用 2 个不同的依赖项,1 个用于生产,1 个用于开发
package.json:
"dependencies": {
"package-name": "git+ssh://git@bitbucket.com:*git package/path*.git#1.0.0",
},
"devDependencies": {
"package-name-dev": "file:*package path*"
}
Run Code Online (Sandbox Code Playgroud)
现在,在拥有这两个包之后,在开发中,我每次调用主包时都需要使用 dev 包,而不是if(isDev){...}对我的所有文件进行大量操作。
我使用了module-alias包,它允许我为一个模块设置一次别名,它将应用于整个项目。
在顶部app.js:
const isDev = (process.env.NODE_ENV === 'development'),
isProd = (process.env.NODE_ENV === 'production');
if (isDev) {
const moduleAlias = require('module-alias');
moduleAlias.addAlias('package-name', 'package-name-dev');
}
Run Code Online (Sandbox Code Playgroud)
就是这样,现在,无论何时const pack = require('package-name'),它都需要在开发中使用本地包 (dev),在生产中使用主包。
注意- 在主包中,我在 git URL 末尾使用了一个标签 (#1.0.0),我在多个项目中使用了相同的包,并且我想确保我控制每个包的版本项目,所以我可以在旧项目上手动测试最新版本,没有任何问题。
原始答案 - 手动更新包
我找不到任何更好的方法来做到这一点,我最终在package.json手动安装我需要的包中添加了一个脚本。
向package.json将更新所需包的脚本添加:
"scripts": {
"update:packages": "npm install git+ssh://git@GIT_URL_HERE#master"
}
Run Code Online (Sandbox Code Playgroud)
虽然这与手动更新包相同,正如@chris 在其他答案的评论中所说,这要容易得多,并且可以用于:
npm run update:packages
Run Code Online (Sandbox Code Playgroud)
注意- 最后的#master标签将安装 master 分支,不是最佳的,但它允许您安装包的最新版本,而无需每次手动更改标签。
更新- 如果你需要这个进行开发,并且私有存储库中的包是你在本地工作的(像我一样),你可以简单地将包链接到项目,所有更改将立即显示,无需重新安装,有关链接的更多信息:
cd /path/to/working/dir
npm link ../path/to/package/dir
Run Code Online (Sandbox Code Playgroud)
Update 2
如果你使用 Docker,npm link在 docker 内部将无法工作,这是因为link正在设置一个到你本地 npm 文件夹的软链接。为了避免这种情况,你将需要设置软链接内的码头工人。
| 归档时间: |
|
| 查看次数: |
8265 次 |
| 最近记录: |