Как откатить npm до старой версии
Перейти к содержимому

Как откатить npm до старой версии

  • автор:

как поменять версию NPM на старую

Начал осваивать REACT. Такая проблема, запускаю в командной строке, чтобы создать проект REACT: create-react-app MyAppName получаю ошибку:

 at JSON.parse () at Object.Module._extensions..json (module.js:668:27) at Module.load (module.js:561:32) at tryModuleLoad (module.js:501:12) at Function.Module._load (module.js:493:3) at Module.require (module.js:593:17) at require (internal/module.js:11:18) at Object. (C:\Users\xxx\AppData\Roaming\npm\node_modules\create-react-app\createReactApp.js:52:21) at Module._compile (module.js:649:30) at Object.Module._extensions..js (module.js:660:10) 

прочитал вариант с npx, npx create-react-app myAppName ошибка npx: installed 1 in 12.735s The «path» argument must be of type string C:\Users\Ustas\AppData\Roaming\npm\node_modules\create-react-app\index.js C:\Users\Ustas\AppData\Roaming\npm\node_modules\create-react-app\package.json: Unexpected string in JSON at position 520 прочитал, что нужно NPM версии 4. , из-за этого проблема. У меня версия NPM 5.6.0 Как установить старую версию, и поможет ли ? Как-то глупо. Может кто подскажет как создать болванку REACT без танца с бубном ? Или откатить NPM до версии 4.

gearmobile / downgrade_to_npm_5.3.0.txt

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

npm install -g npm@5.3.0

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

Footer

© 2023 GitHub, Inc.

You can’t perform that action at this time.

Полезные команды для работы с Node.js

Перед тем как рассматривать полезные команды при работе с Node.js, её необходимо установить.

Команды помогают узнать версию Node.js,

node -h — показывает список всех доступных команд Node.js.

node -v , node —version — показывает установленную версию Node.js.

npm -h — показывает список всех доступных команд пакетного менеджера npm .

На скриншоте часть команд, доступных вместе с npm

npm -v , npm —version — показывает установленную версию npm .

Обе команды дают одинаковый результат

Команда npm update npm -g позволяет обновить версию npm .

npm list —depth=0 показывает список установленных пакетов.

Список установленных пакетов может быть довольно длинным, особенно, если вы давно пишете код.

Команда npm outdated —depth=0 покажет список установленных пакетов, которые требуют обновления. Если все пакеты обновлены, список будет пустым.

npm install package — позволяет установить любой пакет по его имени. Если при этом к команде добавить префикс -g пакет будет установлен глобально на весь компьютер.

Процесс установки gulp

Команда npm i package является укороченной альтернативой предыдущей команды.

Если вы хотите установить конкретную версию пакета, воспользуйтесь префиксом @ с номером версии. Например, npm install package@1.0.1 .

npm uninstall package — удаляет установленный пакет по имени.

Команда npm list package — покажет версию установленного пакета, а команда npm view package version — последнюю версию пакета, которая существует.

Для работы с пакетным менеджером также пригодится файл package.json , который должен лежать в директории, с которой происходит работа в консоли.

Файл package.json

Он содержит различные мета-данные, например, имя проекта, версия, описания и автор. Также он содержит список зависимостей, которые будут установлены, если вызвать из этой папки команду npm install .

Кроме этого он ещё имеет скрипты, которые вызывают другие команды консоли. Например, для этого файла вызов команды npm start вызовет запуск задачи Grunt с именем dev . А команда npm run build вызовет скрипт build , который запустит задачу в Grunt с именем build .

Во время работы часто возникает необходимость установить некоторые пакеты. Если установить пакет с префиксом —save , то он автоматически запишется в package.json в раздел dependencies . Такая же команда с префиксом —save-dev запишет пакет в раздел devDependencies .

nvm (илиNode Version Manager) — утилита, которая позволяет быстро менять версии Node.js.

Чтобы её установить, достаточно запустить скрипт

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash 

Теперь можно установить последнюю версию Node.js, например, 5.0 с помощью команды nvm install 5.0 . Чтобы начать использовать её, введите команду nvm use 5.0 . Таким образом, можно быстро переключаться между версиями, например, для тестирования.

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

NPM version: версионирование, история изменений, деплой проекта

Как я веду красивую историю изменений в своих проектах и деплою одной командой после коммита (нет, это не git hooks).

Если вы не пишете на JavaScript, пусть вас не смущает слово “NPM”, это подходит для любого языка.

npm version

Оглавление:

npm version — классный механизм версионирования, встроенный в NPM.

Версионирование

Главная, казалось бы, цель команды: отмечать версии.

Из коробки это значит, что вы можете написать npm version и запустить цепочку задач по подготовке новой версии. Варианта собственно три:

  • npm version patch — 0.0.1 -> 0.0.2
  • npm version minor — 0.0.2 -> 0.1.0
  • npm version major — 0.1.0 -> 1.0.0

Но можно и принудительно версию вписать, но только по semver.

Что произойдёт:

  1. Выполнится scripts.preversion из package.json, если он есть
  2. В package.json изменится версия
  3. Выполнится scripts.version из package.json, если он есть
  4. Создастся коммит с package.json и версией в названии
  5. На этот коммит поставится тег версии
  6. Запустится scripts.postversion из package.json, если он есть
  • Не надо высчитывать версию, просто выбираете patch , minor или major в зависимости от содержания изменений
  • Не надо ставить тег
  • Вы не забудете изменить номер версии в package.json
  • В postversion вы можете вписать дальшейшие шаги (релиз, деплой). По-хорошему надо релизить после прохождения CI, но кого это волнует

Команда не сработает, если Git грязный, но можно обойти это с —force , я часто обхожу.

Минус в том, что создаются коммиты на каждую версию, кого-то это может раздражать, меня наоборот раздражает, что просматривая список коммитов на Github не видно версий, коммиты версий исправляют это.

Как делать теги 1.2.3 вместо v1.2.3 (убрать v из тега версии):

Добавьте файл .npmrc , добавьте в него пустой tag-version-prefix:

tag-version-prefix="" 

Автоматический Changelog

CHANGELOG.md генерится утилитой conventional-changelog.

Об этом я уже писал 4 года назад. Там я описывал свои поиски, здесь опишу, к чему я пришёл.

С тех пор я все коммиты называю по Angular Conventions. Не пугайтесь “Angular” в названии, никакой привязки там нет.

В 2 словах о соглашениях:

Пишите feat: новая фича или fix: исправлен баг такой-то . Этого уже достаточно, чтобы генерить красивые истории изменений.

Подробнее, насколько я пользуюсь:

Сообщение имеет структуру:

type(scope): subject body footer 

Я обычно ограничиваюсь:

type: subject body 
Типы, в порядке, как я использую:
  • feat — новый функционал
  • fix — исправления ошибок
  • chore — правки скриптов деплоя и т.п.
  • refactor — правки кода без изменения функциональности
  • docs — правки текстов
  • style — правки отступов
  • test — добавление тестов

В changelog попадают только feat и fix .

В футере принято перечислять ссылки на связанные задачи.

Если в футер добавить BREAKING CHANGE: что-то ломающее обратную совместимость , то это также попадёт в changelog. По semver принято менять мажорную версию, если случился BREAKING CHANGE, но я не придерживаюсь строго.

< "scripts": < "version": "npm run changelog && git add CHANGELOG.md", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0" > > 

CHANGELOG.md при таком конфиге попадёт в коммит версии, что удобно, да и коммиты версий становятся не такими уж бесполезными.

Можно поставить standard-changelog чисто под ангуларовский формат, я по историческим причинам его не использую.

Красивые releases на Github

conventional-github-releaser использует тот же механизм извлечения описания из коммитов, но пишет не в файл, а в релиз на Github.

< "scripts": < "postversion": "git push && npm run release", "release": "conventional-github-releaser -p angular" > > 

Вы можете не хотеть автоматом запускать release при версионировании, тогда думаю вы знаете, что делать.

Не помню, обязательно ли пушить перед запуском conventional-github-releaser , скорее да, чем нет, я всегда пушу.

Подмена версий в коде

Что если нужно поменять версию не только в package.json ? Тогда нужно писать скрипты.

У меня случаи несложные, такие:

Поменять версию в README.md

Отсюда (это кстати проект на Go)

Универсальный вариант на JavaScript из 2 файлов: первый меняет в README.md версию на токен на этапе preversion (на нём в package.json ещё старая версия), второй на этапе version меняет токен на новую версию. Регулярка получается универсальной, не надо подгонять под каждый файл.

// заменяет старую версию в README.md на строку ">" const fs = require('fs'); const packageJson = require('../package.json'); const str = fs.readFileSync('README.md', 'utf8'); const regex = new RegExp(packageJson.version.replace(/\./g, '\\.'), 'g'); const replaced = str.replace(regex, '>'); fs.writeFileSync('README.md', replaced, 'utf8'); 
// заменяет строку ">" в README.md на новую версию const fs = require('fs'); const packageJson = require('../package.json'); const str = fs.readFileSync('README.md', 'utf8'); const replaced = str.replace(/\\>/g, packageJson.version); fs.writeFileSync('README.md', replaced, 'utf8'); 
< "scripts": < "preversion": "node scripts/version-replace-pre.js", "replace-version": "node scripts/version-replace.js", "version": "npm run replace-version && npm run changelog && git add CHANGELOG.md README.md" > > 
Поменять версию в docker-compose.yml
#!/bin/bash set -eu version="$(cat package.json | grep '"version": "[0-9]' | cut -d':' -f2 | cut -d'"' -f2)" echo "$version" sed -i 's/shop-list:.*/shop-list:v'"$version>"'/g' docker-compose.yml 
Поменять версию в userscript
#!/bin/bash set -eu version="$(cat package.json | grep '"version": "[0-9]' | cut -d':' -f2 | cut -d'"' -f2)" echo "$version" sed -i 's/@version.*/@version '"$version>"'/g' planfixfix.user.js 

sed -i на MacOS из коробки не работает, чтобы исправить, поставьте brew install gnu-sed и добавьте alias sed=gsed (это неточно, пишу по памяти).

Скрипт надо добавить в секцию scripts.version вашего package.json , добавить изменённый файл в Git, чтобы он попал в коммит версии:

< "scripts": < "version": "bash scripts/version-update.sh && git add changed-file.js", > > 

Публикация в NPM

Это нужно только js проектам и то далеко не всем. Тут всё просто: добавьте npm publish в секцию scripts.release вашего package.json .

< "scripts": < "postversion": "npm run release", "release": "npm publish" > > 

Деплой куда угодно

В секцию release можно вписать любой скрипт, который будет деплоить.

Например, в одном моём проекте по npm version генерится статическое приложение и деплоится на Github Pages скриптом deploy.sh .

< "scripts": < "postversion": "npm run release", "release": "npm run deploy", "deploy": "bash scripts/deploy.sh" > > 

Не только JavaScript

Это неочевидно, но npm version можно использовать для проектов на любом языке, единственное условие: наличие package.json .

Я, например, использовал такой способ для ведения CHANGELOG.md для некоторых сайтов на PHP.

Пример package.json

Типичный пример для моих новых проектов:

< "name": "packagename", "version": "0.0.1", "description": "Description", "scripts": < "version": "npm run changelog && git add CHANGELOG.md", "postversion": "git push && npm run release", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0", "release": "conventional-github-releaser -p angular" >, "author": "Stanislav Popov", "license": "ISC" > 

Установка пакетов

Чтобы всё работало, нужно скачать эти утилиты:

npm install -g conventional-changelog-cli conventional-github-releaser 

Не вижу смысла добавлять эти пакеты в зависимости, хотя раньше так делал.

Если в процессе npm version что-то пошло не так

При отладке этих процессов вы неизбежно где-то ошибётесь и окажетесь в ситуации, когда сценарий не прошёл полностью, а коммит версии уже есть.

Тогда надо откатывать:

  1. Удалите тег: git tag v0.1.2 -d .
  2. Удалите коммит: git reset —hard HEAD~ . Если кроме автоматических изменений в коммите было что-то ещё, аккуратнее тут, лучше тогда без —hard .
  3. Если коммит уже запушился и никто не успел заметить (аккуратнее в команде), удалите коммит оттуда: git push —force и тег отдельно удалите: git push origin :v0.1.2 (он не удалится по push).
  4. Руками удалите релиз с Github, сначала переведите его в draft, потом можно будет удалить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *