Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “跑步是坏习惯吗?”;bower install";在生产中部署时?_Javascript_Deployment_Bower_Gitignore_Self Updating - Fatal编程技术网

Javascript “跑步是坏习惯吗?”;bower install";在生产中部署时?

Javascript “跑步是坏习惯吗?”;bower install";在生产中部署时?,javascript,deployment,bower,gitignore,self-updating,Javascript,Deployment,Bower,Gitignore,Self Updating,我正在开发一个使用bower.js的应用程序;这是我第一次使用bower,如果您发现我的问题描述中有任何明显错误,请纠正我 ------------------------------------------------ 来自Ruby背景,我希望包管理器有一个.lock文件,在git下跟踪,它确切地告诉我当前使用的版本。鲍尔似乎没有这种情况(我说的对吗?) 几天前,我删除并重新克隆了我的存储库,并运行了bowerinstall,认为这样的命令只会安装所需版本的js组件 然后,今天我在一个java

我正在开发一个使用bower.js的应用程序;这是我第一次使用bower,如果您发现我的问题描述中有任何明显错误,请纠正我

------------------------------------------------ 来自Ruby背景,我希望包管理器有一个.lock文件,在git下跟踪,它确切地告诉我当前使用的版本。鲍尔似乎没有这种情况(我说的对吗?)

几天前,我删除并重新克隆了我的存储库,并运行了
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上正在讨论这一功能

我认为在您的情况下,目前有以下几种方法可以解决此问题:

  • 取消忽略并提交您的
    bower\u组件
    (非常难看,因为这会在git中产生大量噪音)
  • 将依赖项版本指定到修补程序级别,例如
    “1.2.3”
    ,而不是
    “~1.2.3”
    • 罪魁祸首:如果您的依赖项有子依赖项,它们可能仍然在次要版本级别上指定,这意味着即使您的直接依赖项有可预测的版本,您的可传递依赖项也可能没有
  • 停止使用bower,改用npm(界面/可用性方面,它们几乎完全相同),并使用
    npm shrinkwrap
    锁定依赖项

干杯,亚历克斯

谢谢@alexander.biskop。在阅读您的答案之前,我已经将所有组件锁定到当前版本;现在我看到了Subversion的问题,我决定在部署到生产环境之前在本地另外运行“bower install”,以确保不会出现意外情况。这仍然有点烦人,不是100%确定我的组件不会随机更新,但至少,锁定顶级依赖项,情况更稳定。我会考虑在将来传递给NPM收缩包。