Nano Hash - криптовалюты, майнинг, программирование

Есть ли способ автоматически запустить nvm use в предварительном сценарии npm?

Я хотел бы автоматически вызывать использование nvm при запуске npm start. Поэтому я придумываю это решение:

файл package.json

"scripts": {
  "prestart": "sh test.sh",
  "start": "nodemon index.js"
}

Файл .nvmrc

4

файл test.sh

#!/bin/bash

if [ -d ~/.nvm ]
  then
    source ~/.nvm/nvm.sh

    nvm use
fi

Это работает и переключается между выводами консоли версий nvm:

> sh test.sh

Found '/my-user-path/.nvmrc' with version <4>
Now using node v4.2.2 (npm v2.14.7)

> [email protected] start /app-path/
> nodemon index.js

Но когда я вызываю форму index.js console.log(process.versions); Скрипт nvm выполняется, вероятно, в другом процессе, поэтому вывод:

{ 
  http_parser: '2.6.0',
  node: '5.1.0',
  v8: '4.6.85.31',
  uv: '1.7.5',
  zlib: '1.2.8',
  ares: '1.10.1-DEV',
  icu: '56.1',
  modules: '47',
  openssl: '1.0.2d' 
}

Любые предложения о том, как справиться с этим должным образом?

Спасибо

15.12.2015


Ответы:


1

Как правило, на Mac файл nvm.sh находится в вашем домашнем пути. Используйте переменную $HOME, если над кодом работает несколько пользователей Mac.

"scripts": {
    "prestart": "source $HOME/.nvm/nvm.sh; nvm use"
}

Я бы добавил это как комментарий к ответу выше, но мне нельзя :(

11.04.2016
  • Это не работает в предварительном сценарии. Это должно быть в стартовом сценарии, согласно ответу @LLeo. 08.01.2018
  • Мне пришлось добавить unset PREFIX; в начало команды, чтобы она заработала. Спасибо! 19.01.2021
  • @JonathonHill Это все еще верно сегодня? Нет причин сомневаться, кроме эволюции NodeJS/npm 16.02.2021

  • 2

    Ваш package.json может выглядеть так

    "scripts": {
        "start": "source /whereever/located/nvm.sh; nvm use; nodemon index.js"
    }
    

    Объяснить. Стартовая строка представляет собой одиночный экземпляр оболочки. Таким образом, вам нужно, чтобы nvm инициализировал PATH в этом экземпляре оболочки. Кроме того, nvm — это функция оболочки, а не исполняемый сценарий оболочки. Функция nvm находится в экземпляре оболочки и создается путем использования файла nvm.sh.

    Извините за правки, потому что я не тестировал свои первые два.

    16.12.2015
  • Спасибо @LLeo. Это сработало лучше всего для меня, потому что я смог создать свой собственный сценарий, который не повлияет на членов моей команды, поскольку я не знаю, у кого есть nvm и установлен ли он в том же месте, что и все остальные. Я не проверял это, но, судя по названию, предварительный запуск повлияет на все сценарии, что в моем случае нежелательно. 10.12.2020
  • Однако у меня был вопрос о вашем ответе. Эквивалентно ли использование точки с запятой использованию двойного амперсанда? ; => && Я попробовал оба способа, и они сработали. Просто надеялся понять различия, если они есть, кроме эстетики 10.12.2020
  • Точка с запятой — это просто разделитель команд в оболочке. && выполняет оставшуюся часть строки только в том случае, если команда слева возвращает true, что является кодом выхода 0 (ненулевым, если false). 12.12.2020
  • Спасибо @LLeo. Еще раз я ценю ваши отличные ответы :) 16.12.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..