Javascript “跑步是坏习惯吗?”;bower install";在生产中部署时?
我正在开发一个使用bower.js的应用程序;这是我第一次使用bower,如果您发现我的问题描述中有任何明显错误,请纠正我 ------------------------------------------------ 来自Ruby背景,我希望包管理器有一个.lock文件,在git下跟踪,它确切地告诉我当前使用的版本。鲍尔似乎没有这种情况(我说的对吗?) 几天前,我删除并重新克隆了我的存储库,并运行了Javascript “跑步是坏习惯吗?”;bower install";在生产中部署时?,javascript,deployment,bower,gitignore,self-updating,Javascript,Deployment,Bower,Gitignore,Self Updating,我正在开发一个使用bower.js的应用程序;这是我第一次使用bower,如果您发现我的问题描述中有任何明显错误,请纠正我 ------------------------------------------------ 来自Ruby背景,我希望包管理器有一个.lock文件,在git下跟踪,它确切地告诉我当前使用的版本。鲍尔似乎没有这种情况(我说的对吗?) 几天前,我删除并重新克隆了我的存储库,并运行了bowerinstall,认为这样的命令只会安装所需版本的js组件 然后,今天我在一个java
bowerinstall
,认为这样的命令只会安装所需版本的js组件
然后,今天我在一个javascript文件中做了一行修复,使用grunt watch
编译了application.js,并意识到application.js自动填充了大量来自bower组件更新的新代码,而我并不知道这些更新
我发现我们的bower组件在.gitignore下,而我几天前运行的bower安装
,实际上在我没有注意到的情况下更新了两个组件
当我意识到发生了什么时,我立即查看了我们的部署过程,我将其粘贴在这里:
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 install会更新所有组件吗?这些组件可能在我的本地版本中没有更新,也没有被git跟踪,最终在生产中使用完全不同的js代码
是的,这可能会发生,并可能导致问题。虽然只要您的依赖项版本被指定为,例如,“~1.2.3”
,影响将是有限的,这将锁定主要/次要版本,并且只允许补丁级别的更新
与bower不同的是,通常在node.js环境中使用的包管理器--有一个名为npm shrinkwrap
的功能/命令,它创建一个npm shrinkwrap.json
文件,该文件锁定依赖项版本,以便以后可以安全地运行npm install
。
这可能是你想要的
然而,目前的bower还没有这一功能——例如,Github上正在讨论这一功能
我认为在您的情况下,目前有以下几种方法可以解决此问题:
- 取消忽略并提交您的
(非常难看,因为这会在git中产生大量噪音)bower\u组件
- 将依赖项版本指定到修补程序级别,例如
,而不是“1.2.3”
。“~1.2.3”
- 罪魁祸首:如果您的依赖项有子依赖项,它们可能仍然在次要版本级别上指定,这意味着即使您的直接依赖项有可预测的版本,您的可传递依赖项也可能没有
- 停止使用bower,改用npm(界面/可用性方面,它们几乎完全相同),并使用
锁定依赖项npm shrinkwrap
干杯,亚历克斯谢谢@alexander.biskop。在阅读您的答案之前,我已经将所有组件锁定到当前版本;现在我看到了Subversion的问题,我决定在部署到生产环境之前在本地另外运行“bower install”,以确保不会出现意外情况。这仍然有点烦人,不是100%确定我的组件不会随机更新,但至少,锁定顶级依赖项,情况更稳定。我会考虑在将来传递给NPM收缩包。