Chromium: nvm несовместим с переменной окружения "npm_config_prefix": - PullRequest
0 голосов
/ 27 мая 2019

Мы перемещаем веб-сайт на базе Angular ( Angular, NgRx и Angular Material Starter ) из CircleCI в Shippable, и теперь я получаю следующие сбои:

27 05 2019 14:46:00.036:INFO [karma-server]: Karma v4.0.1 server started at http://0.0.0.0:9876/
27 05 2019 14:46:00.040:INFO [launcher]: Launching browsers ChromeShippable with concurrency unlimited
27 05 2019 14:46:00.071:INFO [launcher]: Starting browser Chrome
27 05 2019 14:46:01.326:ERROR [launcher]: Cannot start Chrome
        nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/build/versions/node/v10.14.1"
Run `unset npm_config_prefix` to unset it.

27 05 2019 14:46:01.327:ERROR [launcher]: Chrome stdout: 
27 05 2019 14:46:01.327:ERROR [launcher]: Chrome stderr: nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/build/versions/node/v10.14.1"
Run `unset npm_config_prefix` to unset it.

Я могу поделиться большей конфигурацией, но тот же код, прекрасно скомпонованный в CircleCI, теперь не работает в Shippable. Я могу воспроизвести локально (на моем локальном докере), используя изображение drydock/u16nodall.

Мы устанавливаем следующие переменные env перед запуском npm:

export PATH="./node_modules/.bin:$PATH";
export CHROME_BIN=chromium-browser;
export DISPLAY=:99.0;

Различные версии NPM или Node, похоже, не имеют значения.

karma.conf.js имеет это:

// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html

module.exports = function (config) {
  var isWatch = config.buildWebpack.options.watch;
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-spec-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma')
    ],
    client: {
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, '../shippable/codecoverage'),
      reports: ['cobertura', 'html', 'lcovonly', 'json'],
      fixWebpackSourcePaths: true,
      thresholds: {
        statements: 80,
        lines: 80,
        branches: 72,
        functions: 80
      }
    },
    reporters: ['spec'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    customLaunchers: {
      ChromeShippable: {
        base: 'Chrome',
        flags: ['--no-sandbox','--disable-setuid-sandbox']
      }
    },
    browserNoActivityTimeout: 50000,
    singleRun: !isWatch
  });
};

Все, что я смог найти в связи с ошибкой _not совместимая npm_config_prefix_, похоже, связано с поврежденной установкой узла. Но установка новой версии с NVM также показывает эту ошибку.

Есть идеи, как заставить это работать?

1 Ответ

0 голосов
/ 28 мая 2019

Наконец-то я смог преодолеть эту проблему, обновив конфигурацию customLauchers до базовой ChromeHeadless вместо Chrome.

customLaunchers: {
  ChromeShippable: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox','--disable-setuid-sandbox']
  }
},

Я не закончил погоню за ошибками при переносе, но по крайней мере это устраняет ошибку, о которой я специально спрашивал.Я уже подтвердил, что все работало нормально (не вылетало при запуске Chrome) и на сборочных коробках Shippable.

РЕДАКТИРОВАТЬ: Большинство последующих ошибок также были связаны с тем, что Chrome нужно явно запускать как безголовый,

Добавлено в .pa11yci defaults:

"chromeLaunchConfig": {
  "args": ["--no-sandbox","--disable-setuid-sandbox","--disable-dev-shm-usage"]
}

Добавлено в e2e/protractor.conf.js, экспортировано capabilities:

'chromeOptions': {
  args: [ '--headless', '--disable-gpu', '--no-sandbox','--disable-setuid-sandbox','--disable-dev-shm-usage']
}

Было многодругие изменения выходят за рамки этого вопроса.

...