【问题标题】:Managing third party libraries (not node modules) with nodejs?使用 nodejs 管理第三方库(不是节点模块)?
【发布时间】:2012-09-01 17:04:07
【问题描述】:

我正在使用package.json 文件和npm update 来定义nodejs 要求,当然工作正常。

如何使用 node 管理(更新简单的方法)其他第三方库?例如:

https://github.com/documentcloud/backbone.git
https://github.com/twitter/bootstrap.git

vendor 文件夹中。

【问题讨论】:

    标签: node.js twitter-bootstrap dependencies


    【解决方案1】:

    虽然这可能不是 nodejs 的方式,一些纯粹主义者可能会抱怨,Composer 会做你想做的事。即使 Composer 用于 PHP 项目,也没有理由不能使用它来管理 nodejs 项目的 3rd 方 non-npm 存储库。显然,第 3 方库最好包含一个 package.json,但这不会发生。我在我当前的 nodejs 应用程序上尝试了这个,它对我来说非常有效。

    优点:

    • 一个 json 文件指定没有 package.json 文件的自定义外部依赖项
    • 自定义包在项目文件夹中的存储位置
    • 适用于私有存储库和最初不用于 nodejs 的存储库

    缺点:

    • 需要 php cli
    • 更新依赖项的额外步骤
    • 依赖项的额外 json 文件

    这里怎么做(你需要能够从cli运行php):

    1.下载 Composer(直接进入你的 nodejs 项目根目录)

    curl -s https://getcomposer.org/composer.phar > composer.phar
    

    2。创建 composer.json 文件(在项目的根目录中)

    {
        "repositories": [
            {
                "type": "package",
                "package": {
                    "name": "twitter/bootstrap",
                    "version": "2.0.0",
                    "dist": {
                        "url": "https://github.com/twitter/bootstrap/zipball/master",
                        "type": "zip"
                    },
                    "source": {
                        "url": "https://github.com/twitter/bootstrap.git",
                        "type": "git",
                        "reference": "master"
                    }
                }
            }
        ],
        "require": {
            "twitter/bootstrap": "2.0.0"
        }
    }
    

    3。运行 Composer 更新

    php composer.phar update 
    

    这将按照您的要求将包下载到vendor 文件夹中:

    ├── vendor
    │   ├── ...
    │   ├── composer
    │   │   └── installed.json
    │   └── twitter
    │       └── bootstrap
    │           ├── LICENSE
    │           ├── Makefile
    │           ├── README.md
    │           ├── docs
    │           │   ├── assets
    │           │   └── ...
    │           ├── img
    │           │   ├── glyphicons-halflings-white.png
    │           │   └── glyphicons-halflings.png
    │           ├── js
    │           │   ├── bootstrap-affix.js
    │           │   └── ...
    │           ├── less
    │           │   ├── accordion.less
    │           │   └── ...
    │           └── ...
    

    【讨论】:

    • 这听起来不错,但我的项目根目录中已经有 composer.json 文件,它用于管理节点 js 依赖项(express、sequelize 等)。
    • 等等你的意思是package.json?这将是一个额外的 composer.json 文件。
    【解决方案2】:

    总结:我想你想用http://twitter.github.com/bower/

    详情: 有两种方法可以理解您的问题:

    • 如何管理/更新非npm 代码?
    • 如何管理/更新客户端 JavaScript 资产?

    问题的措辞为前者,但从您包含的示例中,我认为您想问后者。

    如果是服务器端代码,只要坚持所有代码都随npm-style package.json manifest 一起提供。如果代码的作者没有响应,请分叉并添加清单。没有任何借口。

    对于客户端代码,情况有所不同。包管理没有既定标准,但它是一个广为人知的问题和非常活跃的开发领域。最近有几个挑战者崛起,试图抢占主导地位:BPMJamEnder。这是您的选择,它们在这里得到了很好的总结:A package manager for web assets

    但是,以上所有方法都解决了一个稍微过于雄心勃勃的问题 - 他们尝试整理这些模块到浏览器的传输(通过延迟加载、require-js 样式、依赖解析、连接/minification 等)这也使它们更难使用。

    该领域的新进入者是来自 Twitter 的 Bower。它关注vendor 文件夹中的下载/更新生命周期,而忽略浏览器交付。我喜欢这种方法。你应该检查一下。

    【讨论】:

    • Bower 似乎是管理客户资产的最佳方式!谢谢你指点我!
    • 我应该如何使用 bootstrap 和 bower 之类的东西?没有 .css,只有 .less,而且 .js 被分成许多不同的文件。
    【解决方案3】:

    你可以选择 git 子模块:

    http://git-scm.com/book/en/Git-Tools-Submodules

    Using someone else's repo as a Git Submodule on GitHub

    [更新 1] 在存储库的根目录执行此操作:

    git submodule add git://github.com/documentcloud/backbone.git vendors/backbone
    git submodule add git://github.com/twitter/bootstrap.git vendors/bootstrap
    

    查看更多信息:http://skyl.org/log/post/skyl/2009/11/nested-git-repositories-with-github-using-submodule-in-three-minutes/

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2011-06-19
      • 2018-05-03
      • 2015-05-27
      相关资源
      最近更新 更多