如何解决使用 package.json 构建应用程序时,如何选择不同的依赖版本进行开发?
我有一个 Javascript 包 (A),它使用我们自己的一个包 (B) 作为依赖项。两者都不在 NPM 注册表中。 A 是一个应用程序,而 B 是使用如下说明符直接从 github 安装的:github:user/project#version
当 A 使用 npm install; npm run build
构建时,我们通常希望它使用 package.json
的依赖项中定义的 B 版本。所以在这里设置生产版本,比如:github:user/B#semver:^1.0.0
。一切都很好。
我想要的是能够构建一个 A 的开发版本,所有内容都相同,但具有 B 的开发分支:github:user/B#dev
。
devDependencies
似乎不是为此而设计的,而是为生产中完全不存在的依赖项而设计的。 NODE_ENV
环境变量似乎无法影响 install
的行为。
目前我编辑了 A 的 package.json
依赖项以使用 github:user/B#dev
,并且记住不要将其提交到 master
分支。如果我把它提交到 dev
分支,那么我不能简单地让 dev
以快进的方式跟随 master
,而是我必须维护两个分支并合并 { {1}} 到 dev
。
master
这很不方便,而且可能容易出错。
我想我的情况并不罕见,而且可能有更好的解决方案。
其他人是如何解决这个问题的?
解决方法
经过一些评论后,我现在了解您的要求。答案是,这取决于如何区分应用程序的 dev
和 prod
版本。
不同的部署
一种选择是对您的应用程序进行两个单独的部署 - 一个用于开发,另一个用于生产。如果源代码本身应该是相同的,而不是有两个单独的存储库,您可以使用 monorepo 里面有两个不同的 package.json
,一个用于开发目的,另一个用于生产.
别名
另一种选择是利用 npm alias
功能 - npm 现在支持包别名,如下所示:
"dependencies": {
"prodPackage": "npm:mypackage@prod","devPackage": "npm:mypackage@dev"
}
如果您随后需要关注如何在您的代码中使用它,那么可以使用 NODE_ENV
变量来控制它:
const Package = process.env.NODE_ENV == 'prod' ? require('prodPackage') : require('devPackage')
或者创建一个更具体的环境变量来定义您的包,然后在您的环境中将其更改为您需要的版本,如下所示:
#in .env
MY_PACKAGE=devPackage #or prodPackage
// in your .js files
const Package = require(`${process.env.MY_PACKAGE}`)
Package.json 和源代码控制
想到的唯一其他选择(不太受欢迎)是从源代码管理中删除 package.json
并根据 dev
或 prod
使用本地的。
不幸的是,没有官方的方法来解决这个问题,但有一些方法可以管理它 - 包括您上面提到的方法。如果有的话,您可以决定哪一个最适合您。
无论哪种方式,使用别名方法或不同的部署,您都不必担心保持单独的分支。我希望这些有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。