大型生产应用程序的插入符、波形符或固定 package.json?

Jab*_*124 5 javascript npm reactjs

我有一个大型的 React 应用程序正在生产中,我想知道是否最好为我的包使用固定版本?我听说使用插入符号 (^) 是一种很好的做法,但在我看来,这会让应用程序面临更多错误?

我已经用谷歌搜索了这个问题很多次,^ 和固定版本之间似乎存在分歧。(npm) 文档中是否有关于使用哪种方法的明确答案?

DJD*_*ark 2

在开发过程中,您可以选择您喜欢的任何一个,但我建议您在开始测试应用程序之前、投入生产之前进行收缩包装。锁定依赖关系:

npm shrinkwrap
Run Code Online (Sandbox Code Playgroud)

此命令将重新调整package-lock.json为可发布的命令npm-shrinkwrap.json,或者只是创建一个新的命令。由该命令创建和更新的文件将优先于任何其他现有或未来的package-lock.json文件。有关 npm 中包锁的设计和用途的详细说明,请参阅npm-package-locks

这样你就可以保留在其中声明的依赖项package.json(波形符/脱字号),但在其中声明的确切版本npm-shrinkwrap.json只会在 npm 安装时使用。

我个人在投入生产之前遇到了一个问题,当使用~(更严格的)声明的依赖项被更新并引入了错误(补丁/错误修复不应该发生这种情况)时。这种事只发生过一次,但我不想挑战命运。

您始终可以npm-shrinkwrap.json通过首先npm update <package_name>指定需要更新的包,然后重新npm shrinkwrap更新现有的npm-shrinkwrap.json.

...并且不要忘记npm ci