在 Mac 下开发,不论是安装软件,以及程序引入包或者其他组件都可以通过命令化的管理工具完成。比如说安装软件可以用 Homebrew,比如说管理前端资源文件可以用 Bower,以及 node 的重要管理工具 npm

Homebrew

Homebrew 简称 brew,是 Mac OSX 上的软件包管理工具,能在 Mac 中方便的安装软件或者卸载软件。官方说 OS X 不可或缺的套件管理器。

安装

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

前提是必须先安装 ruby。 Mac 下默认是安装 ruby。所以可以直接用这条命令安装 Homebrew 了。

特点

  • 使用简单,例如要安装 wget
#安装 wget
$ brew install wget
#卸载
brew uninstall wget
#搜索
brew search wget
#更新
brew update 
#列表
brew list
  • Homebrew 会将套件安装到独立目录,并将文件软链接至 /usr/local

RubyGems

RubyGems 是一个方便而强大的 Ruby程序包管理器,Ruby 的第三方插件是用 gem 方式来管理,非常容易发布和共享,一个简单的命令就可以安装上第三方的扩展库。

PS:千万不要由于是 Ruby 包管理器而忽视它,Mac 下好多管理工具是用 Ruby 开发,如 Homebrew 。即使你丝毫不懂 Ruby 也不妨碍你安装它,好好的使用它,会给你很多使用快感的😄

安装

https://rubygems.org/pages/download#formats下载

  1. 点击上面链接进入到官网,从顶部的链接下载压缩包;

  2. 解压缩到指定文件夹,并通过 cd 指令进入到该文件夹;

  3. ruby setup.rb 使用该命令安装(可能需要管理员权限,使用 sudo

安装完成后将修改镜像包

$ gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
$ gem sources -l
*** CURRENT SOURCES ***

https://ruby.taobao.org

原镜像包 Rubygems 官方网站被 Wall 了,导致 Ruby 程序员在线安装软件 `gem 包的时候无法顺利进行。

PS:之前 ruby.taobao.org 并没有启用 https

圈内流传着一句话:

Homebrew 使 OS X 更完整。用 gem 来安装您的 gems 用 brew 来搞定它们的依赖包。

特点

能远程安装包,包之间依赖关系的管理,简单可靠的卸载,查询机制,能查询本地和远程服务器的包信息,能保持一个包的不同版本,基于 Web 的查看接口,能查看你安装的 gem 的信息。

用法

  • 查看 RubyGems 软件的版本
gem -v
  • 更新升级 RubyGems 软件自身
gem update --system

  • 更新所有已安装的 gem 包
$ gem update

  • 更新指定的 gem 包
$ gem update [gemname]

  • 安装指定 gem 包,程序先从本机查找 gem 包并安装,如果本地没有,则从远程 gem 安装。
gem install [gemname]

  • 仅从本机安装 gem 包
gem install -l [gemname]

NPM

NPM 的全称是Node Package Manager ,是一个 NodeJS 包管理和分发工具,已经成为了非官方的发布 Node 模块(包)的标准.

安装

nodejs 官网 下载 ,完成直接安装。

查看版本号:

npm -v

用法

  • 全局安装命令为
$npm install -g moduleName

  • 查看包的依赖关系
npm view moudleName dependencies
  • 查看包的源文件地址
npm view moduleName repository.url
  • 更新 node 模块
npm update moduleName
  • 卸载 node 模块
npm uninstall moudleName
  • 搜索包
$ npm search packageName
  • 创建一个 package.json 文件,包括名称、版本、作者这些信息等
npm init

Bower

Bowertwitter 推出的一款包管理工具,基于 nodejs 的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系。

安装 Bower 的先决条件是已经安装了 nodejsGit (bower 从远程 git 仓库获取代码包)。

安装

npm install -g bower

用法

  1. 安装包
 bower install <package>

其中包的形式的可以是 GitHub 简写、一个 git 地址、一个 url 或者其他。

例如:

# 安装 jquery
$ bower install jquery
# GitHub shorthand
$ bower install desandro/masonry
# Git endpoint
$ bower install git://github.com/user/package.git
  1. 搜索包
$ bower search
$ bower search <name>
  1. 保存依赖
# install package and add it to bower.json dependencies
$ bower install <package> --save
  1. 卸载包
$ bower uninstall <name> [<name> ..] [<options>]

uninstall 选项:

-S,–save:从项目的 bower.json 文件中移除卸载的包的依赖(更新dependencies)

-D,–save-dev :从项目的 bower.json 文件中移除卸载的包的依赖(更新devDependencies)

  1. bower 初始化
bower init

生成一个 bower.json 文件,用来保存该项目的配置.

➜  demo  bower init
? name mytest
? description this is a package
? main file itest
? what types of modules does this package expose? (Press <space> to select)
❯◯ amd
 ◯ es6
 ◯ globals
 ◯ node
 ◯ yui
? what types of modules does this package expose?

? keywords test
? authors 白若水 <meng_1999@qq.com>
? license MIT
? homepage
? set currently installed components as dependencies? Yes
? add commonly ignored files to ignore list? Yes
? would you like to mark this package as private which prevents it from being accidentally published to the registry? Yes

{
  name: 'mytest',
  authors: [
    '白若水 <meng@gmail.com>'
  ],
  description: 'this is a package',
  main: 'itest',
  moduleType: [],
  keywords: [
    'test'
  ],
  license: 'MIT',
  homepage: '',
  private: true,
  ignore: [
    '**/.*',
    'node_modules',
    'bower_components',
    'test',
    'tests'
  ]
}

? Looks good? Yes

┌──────────────────────────────────────────┐
│ Update available: 1.7.1 (current: 1.6.8) │
│ Run npm install -g bower to update.      │
└──────────────────────────────────────────┘

➜  demo

总结

包管理工具一般有以下的功能:

注册机制:每个包需要确定唯一的 ID 使得搜索和下载的时候能够正确匹配,所以包管理工具需要维护注册信息,可以依赖其他平台。

文件存储:确定文件存放的位置,下载的时候可以找到,当然这个地址在网络上是可访问的。

上传下载:这是工具的主要功能,能提高包使用的便利性。比如想用 jquery 只需要 install 一下就可以了,不用到处找下载。上传并不是必备的,根据文件存储的位置而定,但需要有一定的机制保障。

依赖分析:这也是包管理工具主要解决的问题之一,既然包之间是有联系的,那么下载的时候就需要处理他们之间的依赖。下载一个包的时候也需要下载依赖的包。