在生产环境中进行部署时,执行“下装”的错误做法?

问题描述 投票:2回答:1

我正在开发一个使用bower.js的应用程序; 这是我第一次使用凉亭,因此,如果您发现我的问题描述中有明显错误的地方,请更正我。

------------------------------------------------

来自Ruby背景,我希望程序包管理器有一个.lock文件,在git下跟踪,该文件可以准确地告诉我当前正在使用的版本。 凉亭似乎没有发生这种情况(对吗?)。

几天前,我删除并重新克隆了我的存储库,并运行bower install ,认为这样的命令只会安装所需版本的js组件。

然后,今天我在javascript文件中进行了单行修复,使用grunt watch编译了application.js,并意识到application.js被自动填充了我不知道的Bower组件更新中的大量新代码。

我发现我们的Bower组件位于.gitignore下,而我几天前运行的bower install实际上已经更新了两个组件而没有引起我的注意。

当我意识到发生了什么事时,我立即查看了我们的部署过程,并将其粘贴在此处:

bundle install --path ${SNAP_CACHE_DIR}/.bundle
npm install -g bower grunt-cli
bower cache clean && bower install && bower list
bundle exec cap [our application name] deploy

这很危险吗? bower install更新所有可能在我的本地版本中未更新且未被git跟踪的组件,从而最终在生产中使用完全不同的js代码?

javascript deployment bower gitignore self-updating
1个回答
3
投票

这很危险吗? Bower安装程序是否会更新所有可能在我的本地版本中未更新且未被git跟踪的组件,从而最终在生产中使用完全不同的js代码?

是的,这可能会发生,并可能导致问题。 尽管影响会受到限制,但前提是您的依赖版本指定为例如"~1.2.3" ,这将锁定主要/次要版本,并且仅允许补丁程序级别更新。

bower相比 ,通常在node.js环境中使用的软件包管理器-npm-具有称为npm shrinkwrap的功能/命令,该功能/命令创建了一个npm-shrinkwrap.json文件,该文件可锁定您的依赖版本,从而可以安全地运行npm install之后npm install 。 这可能就是您想要的。

但是,目前的Bower尚不具有此功能-在Github上对此进行了讨论,例如在此处

我认为目前有以下选项可以解决您遇到的问题:

  • bower_components忽略并提交您的bower_components (非常丑陋,因为这会在git中产生大量噪声)。
  • 指定您的依赖版本到补丁程序级别,例如"1.2.3"而不是"~1.2.3"
    • 罪魁祸首:如果您的依赖项具有子依赖项,则仍可以在次要版本级别上指定它们,这意味着即使直接依赖项具有可预测的版本,传递性依赖项也可能没有。
  • 停止使用Bower并改为使用npm (在接口/可用性方面,它们几乎是相同的恕我直言),并使用npm shrinkwrap来锁定您的依赖项。

干杯,亚历克斯

© www.soinside.com 2019 - 2024. All rights reserved.