我正在开发一个使用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代码?
这很危险吗? 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"
。
npm shrinkwrap
来锁定您的依赖项。 干杯,亚历克斯