npm - 如何在 circleci 2.0 中分步启用 nvm?

标签 npm circleci nvm

这是我的步骤

steps:
  -run:
      name: Setup nvm and npm
      command: |
        wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
        export NVM_DIR=$HOME/.nvm
        source $NVM_DIR/nvm.sh
        nvm install 8.9 && nvm alias default 8.9
   -run: npm install && npm run lint && npm test

第二步总是失败并显示此错误消息
/bin/bash: npm: command not found

我查了 .bashrc我可以看到以下几行被添加到文件的末尾
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Circleci 2.0 通过使用 #!/bin/bash -eo pipefail 启动一个新的 shell 来调用 step 命令。

如果我启动一个 docker ( docker run -i -t buildpack-deps:xenial ) 并应用第一步,然后通过 #!/bin/bash -eo pipefail 启动一个新的 shell ,我可以看到npm在路径上可用

我正在为这个项目使用 docker
version: 2
jobs:
  test_main:
    docker:
      - image: buildpack-deps:xenial

那么为什么在 circleci 2.0 环境下会失败呢?如何确保npm可以从第 1 步进入第 2 步吗?

我试图添加 [ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"~/.bash_profile (以防 .bashrc 由于非交互式/非登录 shell 而未执行)

要重现该问题,您可以运行 circleci build有了这个 .circleci/config.yml文件
version: 2
jobs:
  build:
    docker:
      - image: buildpack-deps:xenial
    steps:
      - run:
          name: Setup nvm and npm
          command: |
            wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
            # Activate nvm
            export NVM_DIR=$HOME/.nvm
            touch $HOME/.nvmrc
            source $NVM_DIR/nvm.sh
            # Use node 8.9
            nvm install 8.9 && nvm alias default 8.9
            echo 8.9 > $HOME/.nvmrc
            # Enable nvm in following steps
            echo '[ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"' >> $HOME/.bash_profile
            # To fix npm install : "node-pre-gyp: Permission denied"
            npm config set user 0
            npm config set unsafe-perm true
            npm install -g npx webpack webpack-cli jest
            node --version
            npm --version
      - run: npm install

您将看到以下错误消息:
====>> npm install
  #!/bin/bash -eo pipefail
npm install
/bin/bash: npm: command not found
Error: Exited with code 127
Step failed
Task failed

最佳答案

问题在于这些行:

        # Enable nvm in following steps
        echo '[ -s "$HOME/.bashrc" ] && \. "$HOME/.bashrc"' >> $HOME/.bash_profile

我希望来源.bashrc来自 .bash_profile .然而,由于 circleci 的 shell 是非交互式的,环境变量 PS1是空白。因此 .bashrc由于 .bashrc 中的这一行,基本上一旦采购就立即退出
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

我必须将以下几行直接放在$BASH_ENV 指定的文件中
echo 'export NVM_DIR=$HOME/.nvm' >> $BASH_ENV
echo 'source $NVM_DIR/nvm.sh' >> $BASH_ENV

关于npm - 如何在 circleci 2.0 中分步启用 nvm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49232758/

相关文章:

javascript - 我可以修改和发布 npm 模块 (node.js) 吗?

dependency-injection - 如何创建依赖于 ionic 2/angular 2 并使用依赖注入(inject)的库

node.js - 以编程方式完成 Node 临时 npm 安装

npm - yarn 未安装在 nvm 版本节点版本中

node.js - 更新 NVM Node 版本管理器 creationix 版本

react-native - Expo CLI已全局安装,但是 "npm start"命令仍然询问

ios - CircleCI + React Native + Xcode 10

Android Circle Gradle 警告 : The build VMs have a memory limit of 4G

docker - lxc 驱动程序不支持 Exec : how to get around this?

node.js - Azure Functions 本地 HTTP 触发器问题及解决方案