Skip to content

Instantly share code, notes, and snippets.

@sursir
Last active December 5, 2017 05:27
Show Gist options
  • Select an option

  • Save sursir/c7aa865db04625d46eb82c06e2d3391d to your computer and use it in GitHub Desktop.

Select an option

Save sursir/c7aa865db04625d46eb82c06e2d3391d to your computer and use it in GitHub Desktop.
php composer
# composer install 以 composer.lock 为依据

# 存在 composer.lock 时,手动修改 composer.json 之后
# 1. 重新 composer install 会产生警告 并不会更新依赖 (⚠️:Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.)
# 2. composer update 则会重新加载依赖并重新生成 composer.lock 文件


# 指定为开发所需要的依赖 生产环境不需要的依赖
  composer require --dev

# 生产环境中不加载开发依赖
  composer install --no-dev


# 集成构建时(包括构建 生产代码 与 测试代码)
# 应该根据 .composer 来缓存已安装的依赖

  # 上一版本 composer.lock
  composer.lock.pre-version
  
  # 根据lock文件的上一版本与当前版本的比较,来判断是否重新下载缓存依赖
  `
    [[ ! -f composer.lock.prev || ! -d vendor || $(md5sum composer.lock.prev | awk '{print $1}') != $(md5sum composer.lock | awk '{print $1}') ]] &&
    composer install --no-dev && cp -f composer.lock composer.lock.prev && echo 'installed depend' ||
    echo 'no install depend, use cached'
  `

  # 对以上代码的解释:
  # 假如没有上一版本lock,或者与上一版本lock与当前lock md5不同,重新安装依赖 并 更新composer.lock.prev为当前的composer.lock文件      
  # 即使没有安装依赖也不会报错,因为用了 `|| echo`, 这样的话最终都不会非零退出
  # (重要):假如没有 composer.lock 会重新安装依赖,报错但不会退出。
  # (重要):但是!** 因为版本控制中没有加入lock文件,所以每次都将重新安装依赖 而且每次很慢(因为需要重新确定依赖版本并生成lock文件) **
    # 1. 假如介意每次都安装依赖 请添加 composer.lock 到版本库 或者 修改看情况将 composer.json 作为依据(不推荐)
    # 2. 或者没有 comoposer.lock 时异常情况,那么添加以下代码 没有 composer.lock 将报错非0退出
    `
      [[ -f composer.lock ]] || (echo 'Error! composer.lock dont exists ! ' && exit 1)
    `



Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment