我正在开发一个使用 Bower.js 的应用程序;这是我第一次使用 Bower,所以如果您在我的问题描述中发现任何明显错误的地方,请纠正我。
------------------------------------------------------------ -
来自 Ruby 背景,我希望包管理器有一个 .lock 文件,在 git 下跟踪,它准确地告诉我当前正在使用的版本。这似乎不会发生在 Bower 上(我是对的吗?)。
几天前,我删除并重新克隆了我的存储库,然后运行了 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 代码?
最佳答案
Is this dangerous? Will bower install update all the components, that are likely not updated in my local version and are not tracked by git, ending up having completely different js code in production?
是的,这可能会发生并可能导致问题。尽管只要您的依赖版本被指定为例如,影响就会受到限制。 "~1.2.3"
,这将锁定主要/次要版本并仅允许补丁级别更新。
与 bower 相比,通常在 node.js 环境中使用的包管理器 - npm - 有一个名为 npm shrinkwrap
的功能/命令,这会创建一个 npm-shrinkwrap.json
文件锁定您的依赖版本,以便安全运行 npm install
然后。
这可能就是您想要的。
但是,bower 目前还没有此功能 - Github 上正在进行有关它的讨论,例如here .
我认为目前有以下选项可以解决您遇到的问题:
- 取消忽略并提交您的
bower_components
(非常丑陋,因为这会在 git 中产生大量噪音)。 - 指定您的依赖项版本直至补丁级别,例如
"1.2.3"
而不是"~1.2.3"
。- 罪魁祸首:如果您的依赖项具有子依赖项,它们可能仍会在次要版本级别上指定,这意味着即使您的直接依赖项具有可预测的版本,您的传递依赖项也可能不会。
- 停止使用bower并使用npm(界面/可用性方面,恕我直言,它们几乎相同)并使用
npm shrinkwrap
锁定您的依赖项。
干杯,亚历克斯
关于javascript - 在生产环境中部署时运行 "bower install"是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017182/