javascript - 在生产环境中部署时运行 "bower install"是不好的做法吗?

标签 javascript deployment bower gitignore self-updating

我正在开发一个使用 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/

相关文章:

javascript - 如何在绑定(bind)事件中取消绑定(bind)

node.js - 当我运行应用程序时,我的本地服务器找不到 Bower 文件

ember.js - Ember 构建失败

java - 为 GlassFish 应用程序设置权限( war 部署)

java - 手机无法连接到同一 wifi 网络上的 Flask 服务器

javascript - Bower 是否应该自动包含库 js 和 css 文件,这样它们就不需要列在 index.html 中

javascript - 传递更多值来订阅 observables 的函数

JavaScript 密码生成器 - 数组中的多个随机值

javascript - 如何防止图表中不必要的滚动?

maven - 如何将Gradle uploadArchive与其他ssh端口一起使用?