【问题标题】:How make bower build the package?如何让 bower 构建包?
【发布时间】:2013-06-14 18:19:18
【问题描述】:

有没有办法让 bower 从 GitHub 克隆包后运行 grunt?

我正在尝试使用 Bower,但我正在使用的包之一是 Bootstrap 扩展,x-editable。 问题是,当其他包将完全构建的版本推送到 github 时,当由 Bower 安装时,您有一个构建版本 x-editable 期望您运行一个 grunt 文件来构建包。

这在 npm 等其他包管理器中是一种常见做法,但我可以找到如何让 Bower 在安装时构建它。这意味着我需要另一种机制来完成包的安装。

【问题讨论】:

    标签: twitter-bootstrap gruntjs package-managers bower


    【解决方案1】:

    凉亭中有 3 个钩子,如果由于某种原因您无法像 @Sindre Sorhus 指出的那样进行预构建,postinstall 可能会解决您的问题。

    在 .bowerrc 中做:

    {
        "scripts": {
            "preinstall": "<your command here>",
            "postinstall": "<your command here>",
            "preuninstall": "<your command here>"
        }
    }
    

    来源https://github.com/bower/bower/blob/master/HOOKS.md

    【讨论】:

      【解决方案2】:

      在安装时构建是一种反模式,强烈建议不要在 Node.js 中使用。像 Node 一样,Bower 包应该是预先构建的。这是因为最终用户不必关心软件包需要什么预处理器或构建系统。

      您最好的选择是说服作者预先构建、fork 并自己执行,或者在安装组件后手动构建。

      Bower 团队正计划添加将包发布到服务器的功能,类似于它在 npm 中的工作方式。这对于需要构建步骤的包来说会更好。

      【讨论】:

      • 我正在使用的 npm 中的大多数“重”包在安装后都有一些构建阶段。提交预先构建的跨平台(通常是本机)代码似乎是更糟糕的选择。尽管如此,即使最佳实践 Bower 不鼓励这样做,我认为该选项应该适用于特殊情况。
      • 原生扩展是 Node 中的例外,因为它们没有预编译的基础设施,但正在考虑中。一个选项已经可用。 Bower 有一个 API。因此,您可以随意破解自己的解决方案,但对于普通用户而言,这不是一个好的选择,并且永远不会在 Bower 中得到推荐或支持。
      • @Sinder 我的问题是我是否可以对不是我发布的包强制执行构建阶段?例如x-editable 位于 Bower 存储库中,但要使用它,您需要运行它的 grunt 文件。
      • 我不太明白怎么可以说是“反模式”。 AFAICT Bower 在 git 上工作,通常认为将编译后的文件保存在 git 存储库中是不好的做法。
      • @starwed 看到我更新的答案。当谈到可重用模块时,您通常是对的,但是所有可部署的东西都应该被编译。您指出的问题是 Bower 在 git 上工作,但用户便利胜过开发便利。
      【解决方案3】:

      您可以使用 composer 来处理安装后:

      bower.json:

      {
          "dependencies": {
              "bootstrap": "*"
          }
      }
      

      composer.json:

      {
          "scripts" : {
              "post-install-cmd" : [
                  "bower install --no-color",
                  "lessc bower_components/bootstrap/less/bootstrap.less public/script/bootstrap.css"
              ]
          }
      }
      

      然后我运行composer install:

      Loading composer repositories with package information
      Installing dependencies (including require-dev)
      Nothing to install or update
      Generating autoload files
      bower warn Package bootstrap is still using the deprecated "component.json" file
      bower cloning git://github.com/twitter/bootstrap.git
      bower cached git://github.com/twitter/bootstrap.git
      bower fetching bootstrap
      bower checking out bootstrap#v2.3.2
      bower warn Package jquery is still using the deprecated "component.json" file
      bower copying C:\Users\renadm\AppData\Roaming\bower\cache\bootstrap\9d49e0aedf207bebd028e26cc86a9e58
      bower cloning git://github.com/components/jquery.git
      bower cached git://github.com/components/jquery.git
      bower fetching jquery
      bower checking out jquery#1.8.3
      bower copying C:\Users\renadm\AppData\Roaming\bower\cache\jquery\29cb4373d29144ca260ac7c3997f4381
      bower installing bootstrap#2.3.2
      bower installing jquery#1.8.3
      

      Bower 完成安装后,LESS 编译器会处理 .less 文件并将漂亮的 bootstrap.css 放入我的公共文件夹中。使用 Closure Compiler 可以对 JavaScript 文件执行类似的操作。

      【讨论】:

      • 它与使用任何其他构建工具有何不同?像咕噜声?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2018-09-25
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多