Link npm: Page not found · GitHub Pages

Содержание

npm link на стероидах / Хабр

Думаю многие из вас уже сталкивались с локальной разработкой npm-пакетов. Обычно никаких трудностей это не вызывает: создаём папку, запускаем npm init, пишем тесты, дальше используем npm link (либо просто симлинк) и «шлифуем» api до полной готовности.

Звучит просто… только если вы не используете Babel, Rollup, Webpack и т.п. Иными словами, всё хорошо, пока проект не нужно собрать перед публикацией, да ещё с модификацией исходного кода. Кроме того, одновременно разрабатываемых пакетов может быть больше чем один, что в разы усложняет «жизнь». Чтобы исправить эту ситуацию, пришлось сделать маленькую утилиту npmy, под катом небольшая статья с описанием тех. процесса работы и пример использования.

Итак, как я уже говорил, основная проблема локальной разработки — это использование scripts/хуков (prepublish, prepublishOnly и т.д.), именно по этой причине npm link не подходит, ведь по сути — это банальный симлинк, да ещё по завершению разработки нужно не забывать про npm unlink.

Поэтому я принялся за свое решение, которое:

  1. Имеет простую настройку.
  2. Эмулирует полный цикл публикации.
  3. Создает симлинк на псевдо-опубликованную версию (далее ПОВ).
  4. Следит за изменениями и обновляет ПОВ.

Настройка проекта

Первой мыслью было добавить правила прямо в package.json, но это неправильно, ведь это именно локальная разработка, поэтому правила было решено размещать в .npmyrc, который без труда можно добавить в .gitignore.

Сам файл — ни что иное, как простой JSON-объект, у которого:

  • key — название зависимости из package.json;
  • value — локальный путь до разрабатываемого пакета (относительный или абсолютный).

Всё, на этом конфигурация закончена.

Запуск

Заходим в папку с .npmyrc и запускаем npmy, который:

  1. Читает .npmyrc.
  2. Фильтруем список зависимостей на два списка для:
    • установки из NPM;
    • локальной установки.
  3. Установка зависимостей из NPM.
  4. Псевдо-публикация пакетов из .npmyrc.
  5. Создание симлинка на ПОВ.
  6. Запуск отслеживания изменений (watch).

Процесс псевдо-публикации

Это самое интересное, ради чего всё и затевалось. Для начала вспомним, как это работает в оригинальном npm.

Как видите, тут нас ждет сюрприз, prepublish и prepare выполняются как на npm publish, так и на npm install (без аргументов). Поэтому если вам нужна сборка проекта перед публикацией, используйте prepublishOnly, но только начиная с 5 версии. Хоть этот хук и добавили в 4, работает он неправильно, и вместо собранного пакета уедет не пойми что, увы.

В моём процессе перед запуском всех хуков есть ещё одно звено, а именно создание копии проекта (вместе с node_modules):

  1. Копия создается через rsync в темповую папку.
  2. Модифицируется package.json, из которого убирается npm test, чтобы не тормозить процесс псевдо-публикации.
  3. Затем для копии запускаются все хуки соответствующие процессу публикации.
  4. И в финальный штрих: удаление всего, что не соответствует секции files.
  5. Profit.

Вуаля, теперь мы имеем версию пакета, которую бы вы получили при установки из npm. Также при каждом изменении исходников, ПОВ будет обновлена автоматом.

Кроме этого, npmy не забывает про секцию bin в package.json и корректно создаёт симлинки на объявленные там скрипты.

Итого

  • npm install -g npmy
  • Создаем .npmyrc в проекте
  • Запускаем npmy

Спасибо за внимание, надеюсь утилита будет полезна не только мне. :]

P.S.1.0.0″
}
}

При выполнении npm install будут установлены все зависимости, а также будет создана конфигурация bin node-red .

Но мой собственный bin будет полностью проигнорирован. Это не возможно, чтобы использовать cli-name в cmd . Необходимо также выполнить npm link , на втором шаге. Тогда cli-name будет доступен как команда в консоли. Я даже пытался использовать сценарий postinstall из npm с npm link в нем, но потом у меня получился цикл …

Есть ли способ сделать это за один шаг на npm install ?

node.js

npm

npm-install

package.json

npm-link

Поделиться

Источник


eisbehr    

21 февраля 2017 в 13:39

6 ответов




1

Вы можете попробовать изменить свой package.1.0.0"
}
}

И просто беги:

npm install

Поделиться


jccguimaraes    

21 февраля 2017 в 13:46



1

Чтобы запустить двоичный модуль global ( bin), вам необходимо установить его глобально.

npm -g install

NodeJS: Creating your first global module

Другой вариант (если вы используете linux) — использовать $(npm bin)/<module> , если он не установлен глобально.

Поделиться


Jake Holzinger    

14 марта 2017 в 02:10



1

Похоже, на самом деле нет встроенного способа автоматического выполнения этих задач. Поэтому я создал запрос на эту функцию непосредственно на npm . Похоже, что новая команда, такая как npm il , может быть реализована.

Я буду обновлять это здесь, когда будет доступен тот или иной способ.

https://github.com/npm/npm/issues/15999

Поделиться


eisbehr    

14 марта 2017 в 14:26



0

npm-ссылка действительно предназначена для другой цели. В тот момент, когда вы установите npm, вы уже сможете использовать его в командной строке.

npm ссылка предназначена для привязки текущей папки разработки к установленному каталогу вашего пакета. Это делается для того, чтобы при внесении изменений в папку разработки она автоматически становилась доступной в cli, и вам не нужно было переустанавливать ее.

После установки попробуйте перейти к usr/local/bin <-, где это должно быть. если вы не можете найти мой-executable.js здесь. Тогда что — то не так в процессе установки.

Поделиться


Subomi    

13 марта 2017 в 11:05



0

Вы можете создать сценарий в своем package.1.0.0"
}
}

Затем просто запустите npm run install-link , и он выполнит обе команды.

Поделиться


grizzthedj    

07 марта 2017 в 20:38


Поделиться


אלחנן בעל-שם    

27 мая 2020 в 06:52


Похожие вопросы:

Как сказать npm построить модуль при установке с зависимостями родительского проекта?

Я хотел бы получить объяснение о том, как npm модули получают сборку при установке, я приведу пример: Когда я смотрю на исходники модуля material-ui npm на GitHub , там есть исходники, но нет…

npm пакеты недоступны при локальной установке

Я работаю с npm в веб-приложении и обнаружил проблему при использовании некоторых пакетов, которые требуют выполнения команд terminal, таких как nodemon и concurrently Я установил его через sudo npm…

хотите выполнить пользовательское действие при установке APK?

Я хочу выполнить некоторую пользовательскую операцию при установке APK. Эти операции включают копирование общего объекта (. so) в /system/lib ,создание некоторых общих настроек, чтобы мое приложение…

Как удалить пакет, установленный с помощью ссылки npm?

При установке пакета узла с использованием sudo npm link в каталоге пакета, как я могу удалить пакет после завершения разработки? npm link устанавливает пакет как символическую ссылку в глобальном…

при установке npm я получаю следующую ошибку

При установке npm я получаю ошибку, как показано ниже. Пожалуйста, помогите мне. заранее спасибо.

npm установке кидает ошибку в Node-sass установки

Я пытаюсь выполнить команду установки npm, но получаю ниже ошибку при установке node-sass . package.json : { name: XXXXX, version: 1.0.0, description: , main: index.js, dependencies: { angular:…

Npm не может быть успешно установлен при установке nodejs

Я новичок в использовании nodejs. Я установил Node.js с помощью этой команды sudo apt-get install -y nodejs Обычно, при установке это Node.js, npm будут установлены автоматически. Но при проверке…

Как и что делает npm link в этом примере?

Я устанавливаю react-native-elements , и в руководстве по установке есть эта команда: npm i react-native-vector-icons —save && react-native link react-native-vector-icons Мне любопытно, что…

Как я могу передать ответ ‘yes’ при установке npm на Dockerfile

У меня есть Dockerfile, как показано ниже : FROM node:latest RUN npm install something && \ npm install something && \ npm install something Я хочу передать ответ ‘yes’ для всех…

Найдено 4 уязвимости при установке npm

Я только начинаю с react-native. При установке этого пакета npm install —save react-native-validator-form https://github.com/NewOldMax/react-native-validator-form/issues/3 Мне было предложено npm…

Разница между `npm link x ‘ и `npm install /path/to/x`

Я думал, что понимаю разницу между

npm link x

и

npm install /local/path/to/x

первоначально я думал, что первый создал символическую ссылку на x, в то время как второй установил отдельную копию x в вашем проекте, а не символическую ссылку на нее.

Однако недавно я заметил, что мое первоначальное впечатление было неверным, и они оба, похоже, используют символические ссылки — так есть ли разница между ними и в чем она заключается?

node.js

npm

npm-install

npm-link

Поделиться

Источник


Alexander Mills    

04 июня 2018 в 05:46

2 ответа


  • в чем разница между «npm install» и «npm —userconfig=./.npmrccorp i »

    Я хочу знать, в чем разница между этими двумя командами в nodejs npm install и npm —userconfig=./.npmrccorp i Насколько я знаю, оба установят необходимые модули узла, указанные в package.json .

  • В чем разница между NPM-g (global) install и NPM —save

    В чем разница между npm -g(global) install и npm —save ? Сначала gulp install -g и —save , затем для других проектов: npm i gulp —save-dev могу ли я просто использовать эту команду? Я не знаю основной разницы между ними?



28

В статье о Медиуме Алекса Миллса это изложено голым.

В нем говорится, что разница между npm link x и npm install /local/path/to/x составляет:

  1. Большая разница в том, что npm install /local/path/x будет
    запускать крючки предустановки/постустановки, а npm link x -нет.

  2. npm link использует глобальное пространство NPM, npm install /local/path/x -нет. npm link создает символическую ссылку на x
    в глобальном пространстве, а затем, когда вы вызываете npm link x из
    y, он создает символическую ссылку не непосредственно на x, а скорее на
    глобальную символическую ссылку. Это важное различие, если вы
    использование различных глобальных версий node.js, например, NVM.

  3. npm install /absolute/path/x изменит package.json, npm link x
    -нет.

Чтобы получить свежую локальную копию вместо символической ссылки, используйте npm pack , например:

tgz="$PWD/$(npm pack)"
cd <other project>
npm install "$tgz"

Вы также можете использовать cp/rsync,, но это не приведет к запуску установочных крючков или помещению исполняемых файлов в node_modules/.bin …это сработает.

Поделиться


Alexander Mills    

04 июня 2018 в 21:29



6

npm ссылка

npm link
npm link <folder>

Обе вышеприведенные команды создадут символическую ссылку <folder> в глобальных пакетах.

Теперь npm link <folder> будет символически ссылаться на то же самое в вашей папке node_modules также для вашего текущего проекта. И эти имена будут основаны на имени проекта в package.json , а не на имени папки, которую вы связываете

package.json вашего текущего проекта не будет затронут или изменен

Зависимости пакета по-прежнему будут установлены, как вы можете видеть в коде здесь

https://github.com/nodejs/node/blob/31d5bdea70e44802918d6f4aa7c378bc1992be54/deps/npm/lib/link.js#L156

Итак, подведем итог

  1. Он создает символическую ссылку в глобальной папке (всегда)
  2. Это не меняет package.json
  3. Он устанавливает любые из отсутствующих зависимостей

npm установить

Теперь npm install <folder> немного отличается от этого

  1. Он не создает символическую ссылку в глобальной папке
  2. Он изменяет и добавляет ссылку на package.json
  3. Он создает символическую ссылку на исходную папку

Поделиться


Tarun Lalwani    

12 июня 2018 в 05:11


Похожие вопросы:

В чем разница между «обновление -г npm», «npm обновление -г», «npm установить -г npm», и «N стабильный»?

Мой npm кажется устаревшим, так что, похоже, я мог бы использовать 4 способа его обновления: sudo npm update -g # => npm 3.8.6 sudo npm upgrade -g # => npm 3.8.7 sudo npm install -g npm sudo…

В чем разница между npm установить и запустить npm строить?

В чем разница между npm install и npm run build ? Я заметил в своем проекте, что иногда npm начинает терпеть неудачу, когда выполняется npm install , но при запуске npm run build он работает просто…

Какие папки npm/bin должны быть в PATH ? (OS X 10.8.2 / npm установлена с homebrew )

Обновление узла с помощью homebrew ==> Downloading http://nodejs.org/dist/v0.8.21/node-v0.8.21.tar.gz ######################################################################## 100.0% ==>…

в чем разница между «npm install» и «npm —userconfig=./.npmrccorp i »

Я хочу знать, в чем разница между этими двумя командами в nodejs npm install и npm —userconfig=./.npmrccorp i Насколько я знаю, оба установят необходимые модули узла, указанные в package.json .

В чем разница между NPM-g (global) install и NPM —save

В чем разница между npm -g(global) install и npm —save ? Сначала gulp install -g и —save , затем для других проектов: npm i gulp —save-dev могу ли я просто использовать эту команду? Я не знаю…

Разница между ‘npm add’ и ‘npm install —save’?

Я искал в интернете и до сих пор не могу понять, есть ли какая-то разница между npm add <package> и npm install —save <package> . Спасибо.

В чем разница между npm install и meteor npm install

Я работаю над Meteor и хочу знать, в чем разница между ними npm install и meteor npm install . Спасибо

Разница между npm install и npm install —save?

В том числе и слово-сохранить означает? или в чем разница между ними: npm install и npm install —save?

В чем разница между ‘npm i’ и ‘npm install’?

В чем разница между командами npm i и npm install ? Оба устанавливают все узловые модули от package.json . Я знаю, что это значит установить. Вполне возможно, что существует некоторая разница между…

разница между командами npm install react-router-dom и npm install —save react-router-dom

разница между командами npm install react-router-dom и npm install —save react-router-dom Я попробовал обе команды и получил один и тот же результат, поэтому не могу понять, в чем фактическая…

npm — npm-link — Synopsis Description Связывание пакетов-это двухступенчатый процесс. Во-первых,



Synopsis

npmlink(in package dir)

npmlink[<@scope>/]<pkg>[@<version>]

alias: npmln

Description

Связывание пакетов-это двухступенчатый процесс.

Во-первых, npm link в папке пакета создаст символическую ссылку в глобальной папке {prefix}/lib/node_modules/<package> , которая ссылается на пакет, в котором была выполнена команда npm link . Он также свяжет любые ячейки в пакете с {prefix}/bin/{name} . Обратите внимание, что npm link использует глобальный префикс ( его значение см. В npm prefix -g ).

Затем в другом месте npm link package-name создаст символическую ссылку от глобально установленного имени- package-name к node_modules/ текущей папки.

Обратите внимание, что package-name взято из package.json , а не из имени каталога.

Имя пакета может иметь префикс области действия. См. scope . Перед областью видимости должен стоять символ @, за которым следует косая черта.

При создании архивов для npm publish связанные пакеты «снимаются» до их текущего состояния путем разрешения символических ссылок.

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

Например:

cd ~/projects/node-redis

npmlink

cd ~/projects/node-bloggy

npmlink redis

Теперь любые изменения в ~/проектах/узле-редисе будут отражаться в ~/проектах/узле-блогги/узле_модулей/узле-редисе/.Обратите внимание,что ссылка должна быть на имя пакета,а не на имя каталога для этого пакета.

Вы также можете сократить два шага на один.Например,сделать приведенный выше вариант использования короче:

cd ~/projects/node-bloggy

npmlink../node-redis

Вторая строка-это эквивалент действий:

(cd ../node-redis;npm link)

npmlink redis

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

Обратите внимание, что в этом случае вы имеете в виду имя каталога node-redis , а не имя пакета redis .

Если ваш связанный пакет имеет область действия (см. scope ), ваша команда ссылки должна включать эту область, например

npmlink @myorg/privatepackage

См.также

node.js — NPM: после «npm link» модуль не найден

Я разрабатываю два модуля для NodeJS, первый называется aligator, а второй aligator-methods. Второй зависит от первого, чтобы работать. Я разрабатываю эти два модуля одновременно, и я хочу глобально связать aligator, чтобы я мог использовать его, как в реестре npm, и я только что установил его глобально. Для этого в документации NPM сказано, что мне нужно использовать npm link, но он не работает.

Файл package.json модуля aligator:

{
  "name": "aligator",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "private": true,
  "directories": {
    "doc": "docs",
    "example": "examples",
    "test": "spec"
  },
  "scripts": {
    "test": "gulp jasmine"
  },
  "license": "MIT",
  "devDependencies": {
    "gulp": "^3.0.0.1"
 }
}

Первым делом я связал модуль глобально:

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

Это, если я не ошибаюсь, создало глобальную ссылку на мой модуль aligator, и теперь я могу использовать этот модуль где угодно на компьютере.

Затем я перешел к другому модулю и попытался установить зависимость, но он дал мне следующий результат:

$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0

Я даже пытался связать это напрямую с:

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

Но и это не сработало.

Есть мысли о том, что может происходить? Я где-то читал, что, возможно, это как-то связано с моей установкой node и npm , потому что это было сделано Homebrew, и поэтому иногда мне нужно использовать sudo, это казалось маловероятным, но я пробовал то, что они предлагали, и это тоже не сработало.

105

Roc

3 Июл 2014 в 13:55

10 ответов

Лучший ответ

Проблема заключалась в том, что свойство main объекта package.json указывало на несуществующий файл. Кажется, что проблема может возникнуть по нескольким причинам, поэтому обязательно посмотрите другие ответы.

46

Roc
29 Янв 2020 в 09:54

Я столкнулся с этой проблемой из-за NVM, у меня была одна версия узла для зависимости, а другая для зависимого.

46

linuxdan
6 Дек 2016 в 16:56

Удаление package-lock.json и запуск npm install снова решили проблему для меня.

38

Sean Inge Asbjørnsen
14 Ноя 2018 в 11:39

Когда вы впервые запускаете npm link из каталога aligator, вы создаете ссылку из вашего глобального каталога node_modules на aligator. Затем, когда вы запускаете npm link aligator из каталога aligator-methods, вы связываете aligator из локально установленных модулей node_modules с исходным источником (как показано в приведенном выше примере). Как только это будет сделано, больше не будет необходимости в установке, поскольку она уже «установлена». Какие ошибки вы видите после запуска команды npm link aligator?

Если вы просто хотите установить зависимость из локального каталога, вы можете просто попробовать вместо этого использовать npm install. Например:

$ cd ~ / методы-алигаторы
$ npm install ../aligator

13

dylants
3 Июл 2014 в 20:47

Моя проблема заключалась в том, что репо A использовало npm, а репо B использовало yarn, поэтому мне нужно было запустить yarn link в репо B, чтобы вытащить его через npm link package-name в репо A.

8

FrostyDog
6 Янв 2020 в 22:02

Что сработало для меня, так это:

  1. Удалите node_modules как в зависимости, так и в модуле потребителя.
  2. Беги npm unlink --no-save [dependency-module]
  3. повторно установите связь с помощью команд с двумя ссылками согласно npm-link

Теперь я могу полностью протестировать свой неопубликованный модуль локально.

Кроме того, существует команда npm pack, которая может помочь вам протестировать неопубликованные модули, хотя и не столь надежна.

npm-pack

6

ishaan
28 Апр 2019 в 21:00

Исправить мою версию этой проблемы; в npm v5.3.0 я удалил node_modules из репозитория, который связывал с другим проектом.

Я обнаружил, что после npm v3 они пытаются поместить все зависимости node_modules в один каталог node_modules (один в вашем проекте), чтобы максимально сгладить структуру (http://codetunnel.io/npm-5-changes-to-npm-link/).

3

crollywood
8 Дек 2017 в 13:27

Для меня это произошло, когда я уменьшил номер версии своего локального пакета с 0.1.0 до 0.0.1. И в проектах, где я связался с этим пакетом, я все еще использовал более высокий номер версии. Обновление зависимостей в package.json исправило это.

1

Flion
7 Ноя 2016 в 10:22

Если вы, как и я, изменили tsconfig module с es5 на esnext или что-то в этом роде, то значение по умолчанию для moduleResolution могло измениться.

Если для moduleResolution не задано значение «node», машинописный текст не будет разрешать пакеты node_modules.

Вы можете прочитать на странице Параметры компилятора о том, как зависит значение по умолчанию от значения module, значение которого по умолчанию, в свою очередь, зависит от target, но, вероятно, явно установите его на «узел».

1

Matthias
4 Авг 2020 в 15:10

При использовании peerDependency

Я разрабатываю два пакета: stejs и stejs-loader. stejs-loader имеет stejs как peerDependency. Когда я запускал npm link stejs-loader и npm link stejs в своем проекте, я получал сообщение об ошибке, которое stejs-loader не смог найти stejs. Я исправил это, запустив npm link stejs в каталоге stejs-loader.

0

ItsaMeTuni
24 Июн 2020 в 00:04

NPM | JS: Настройка окружения

Установка Node.js добавляет в систему не только интерпретатор, но и несколько важных утилит для работы с JavaScript-проектами. Среди них утилита npm.

# Так можно проверить ее наличие
$ npm --version
6.14.5

npm выполняет множество важных задач, с которыми мы будем знакомиться в течение курса. Сейчас нас интересует ее базовое использование – создание (инициализация) нового проекта. Под проектом понимается код какого-то приложения, например, конкретного сайта.

Для создания нового проекта нужно выполнить две вещи:

  1. Создать директорию проекта – место, внутри которого будут располагаться все файлы с кодом.C at any time to quit.
    package name: (hexlet-hello-world)

    В процессе инициализации, npm задаст несколько вопросов на тему того как должен называться проект, какая у него должна быть версия, описание и тому подобное. Все эти вопросы можно смело пропускать, у вас всегда будет возможность поменять ответы.

    В конце npm спросит все ли правильно и покажет содержимое файла package.json, который и станет основой нового проекта. После ответа yes этот файл запишется на диск и проект будет считаться готовым к работе.

    {
      "name": "tmp",
      "version": "1.0.0",
      "type": "module",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    

    package.json — это текстовый файл, внутри которого данные хранятся в JSON формате. Этот формат позволяет описывать данные как пары «ключ-значение», где значением может быть сам JSON. В примере выше — это значение ключа scripts.

    Обратите внимание на ключ «type» в JSON выше. Эту часть нужно добавить самостоятельно, исправив файл. Она нужна для работы системы импортов.

    npm-ссылка | npm Docs

    Synopsis

     

    npm link (in package dir)

    npm link [<@scope> /] [@ ]

    псевдоним: npm ln

    Описание

    Связывание пакетов двухэтапный процесс.

    Сначала ссылка npm в папке пакета создаст символическую ссылку в глобальной папке
    {prefix} / lib / node_modules / , который ссылается на пакет, в котором npm
    Ссылка
    команда была выполнена.Он также свяжет любые ячейки в пакете с {prefix} / bin / {name} .
    Обратите внимание, что ссылка npm использует глобальный префикс (см. Его значение в префиксе npm -g ).

    Затем, в другом месте, npm link имя-пакета создаст
    символическая ссылка от глобально установленного имя-пакета до node_modules /
    текущей папки.

    Обратите внимание, что имя пакета взято из package.json ,
    не из имени каталога.

    Имя пакета может иметь префикс области действия. См. Область применения .
    Перед областью действия должен стоять символ @, за которым следует косая черта.

    При создании архивов для npm publish связанные пакеты
    «снэпшот» до их текущего состояния путем разрешения символических ссылок.

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

    Например:

     

    cd ~ / projects / node-redis

    npm link

    cd ~ / projects / node-bloggy

    npm link redis

    Теперь любые изменения в ~ / projects / node-redis будет отражено в
    ~ / проекты / node-bloggy / node_modules / node-redis /.Обратите внимание, что ссылка должна
    быть именем пакета, а не именем каталога для этого пакета.

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

     

    cd ~ / projects / node-bloggy

    npm link ../node-redis

    Вторая строка эквивалентна действию:

     

    (cd ../ node-redis; npm link)

    npm link redis

    То есть сначала создает глобальную ссылку, а затем связывает глобальную
    цель установки в папку вашего проекта node_modules .

    Обратите внимание, что в этом случае вы имеете в виду имя каталога, node-redis ,
    вместо имени пакета redis .

    Если ваш связанный пакет имеет область действия (см. Область ), ваша команда связи должна включать эту область, например

     

    npm link @ myorg / privatepackage

    См. Также

    Общие сведения о npm-link. Написание кода приложения и зависимости… | Франциска Хинкельманн | DailyJS

    Одновременная работа с приложением и зависимостью

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

    Вы можете внести изменения в node_modules и вручную скопировать изменения в репозиторий git зависимости, как только вы закончите. Но есть более чистый подход: npm link .

    Использование

    Связывание пакетов — это двухэтапный процесс:

    1. Создайте глобальную символическую ссылку для зависимости с помощью npm link .Символическая ссылка , сокращение от символической ссылки, — это ярлык, который указывает на другой каталог или файл в вашей системе.
    2. Укажите приложению использовать глобальную символическую ссылку с npm link some-dep .
     cd ~ / projects / some-dep 
    npm link # Шаг 1.
    cd ~ / projects / my-app
    npm link some-dep # Шаг 2.

    Вы можете редактировать, транспилировать, запускать тесты или фиксировать как обычно в какой-то деп . В то время как my-app работает с изменениями, внесенными вами в some-dep .Символические ссылки являются локальными и не будут привязаны к git . Когда вы будете готовы поделиться своим кодом, опубликуйте новую версию some-dep или нажмите в ветку, указанную в my-app package.json :

     cd ~ / projects / my- app 
    npm install - save some-dep @ fhinkel / some-dep # experimental-branch

    Debugging

    Если вы используете VSCode и хотите установить точки останова в some-dep , вам необходимо включить символические ссылки в отладчике для мое приложение .Сделайте это, установив

     «runtimeArgs»: [
    «--preserve-symlinks»
    ]

    в launch.json .

    Включить символические ссылки в конфигурации отладки в коде

    Вернуться к нормальному состоянию

    Как вернуться к нормальным зависимостям ? Если вы больше не хотите использовать локальную версию some-dep , удалите символическую ссылку. Но будьте осторожны, npm unlink — это псевдоним для npm uninstall , он не отражает поведение npm link .

     cd ~ / projects / my-app 
    npm uninstall --no-save some-dep && npm install

    Вы можете очистить глобальную ссылку, хотя ее наличие не будет мешать работе my-app .

     cd ~ / projects / some-dep 
    npm uninstall # Удалить глобальную символическую ссылку

    Заключение

    Я использовал npm link при работе над зависимостями клиентских библиотек для Google Cloud Platform. Все наши библиотеки используют модуль @ google-cloud / common .В некоторых случаях мне нужно было сразу увидеть изменения в более крупных библиотеках, а не изолированно в общем .

    Освоение двухэтапного процесса npm link — полезное дополнение к набору инструментов любого разработчика Node.js. Процесс состоит из запуска npm link в зависимости и npm link some-dep в приложении.

    Огромное спасибо Питеру Маршаллу и Александру Фенстеру за помощь в редактировании этого сообщения.

    Использование npm-ссылки для использования узловых модулей, которые «в процессе»

    [00:00] Иногда вам нужно использовать модуль до его публикации или до того, как вы будете готовы опубликовать его новую версию. NPM предоставляет команду под названием «ссылка», которая полезна именно для этой цели. В данном случае у нас есть модуль с именем «upper», который обладает удивительной функциональностью, позволяя принимать строку и возвращать ее версию в верхнем регистре. Он находится здесь, в этом верхнем каталоге, и мы хотим использовать его из этого пользовательского каталога.

    [00:29] Наш индексный файл и пользователь просто запрашивают верхний уровень, а затем выходят из системы, передав ему строку «Hello World». Здесь мы находимся в каталоге пользователя, поэтому, если мы попытаемся использовать это, мы получим эту ошибку, которая говорит: «Не удается найти модуль ‘upper’». Это потому, что мы его не установили. На самом деле, мы не можем его установить, потому что верхний нигде не публиковался.

    [00:54] Но есть способ обойти это, и он состоит в том, чтобы перейти в верхний каталог и затем сказать «ссылка npm», и ссылка npm, которую вы видите, создаст символическую ссылку в user / local / lib / node modules / upper в тот каталог, в котором мы только что были.Теперь мы создали эту символьную ссылку в нашей системе, поэтому, если мы вернемся в каталог пользователя, теперь мы должны сказать ему, что мы хотим, чтобы он использовал это местоположение.

    [01:30] Мы скажем «npm link upper», и вы увидите, что затем будет создана трехэтапная символическая ссылка. Он свяжет каталог node modules / upper в нашем пользовательском каталоге с тем местом, где мы создали символическую ссылку на последнем шаге, которая затем, конечно же, указывает на сам Upper. Теперь мы действительно можем запустить наш индексный файл, который использует Upper, и мы увидим, что вывод «Hello World.»

    [02:05] Одна вещь, которую следует отметить, особенно если вы используете Mac, заключается в том, что когда вам это нужно, ваш модуль был опубликован, или вы только что закончили с этим проектом, независимо от В таком случае вам следует отсоединить этот модуль, потому что он может вызвать проблемы с такими вещами, как Time Machine, которые довольно сложно отследить. Если затем мы просто скажем «npm unlink upper», вы увидите, что он отменяет сборку этой ссылки , и теперь, если мы снова запустим нашу программу, мы снова получим эту ошибку.

    [02:40] Используйте ссылку npm без аргументов в каталоге модуля, который вы хотите предоставить другим модулям, а затем ссылку npm с тем именем модуля, в котором вы хотите его использовать.Следует отметить, что команда npm link требует наличия файла package.json, потому что она фактически будет использовать поле имени оттуда для создания этой ссылки.

    javascript — Установка локального модуля с помощью npm?

    Итак, у меня было много проблем со всеми упомянутыми до сих пор решениями …

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

    Мне также нужно, чтобы он работал в Windows И Unix, поэтому символьные ссылки не идеальны.

    Указание на результат tar.gz (пакет npm) работает для зависимой папки пакета npm, однако это вызывает проблемы с кешем npm, если вы хотите обновить пакет. Он не всегда извлекает новый из указанного пакета npm при его обновлении, даже если вы удалите node_modules и повторно выполните установку npm-install для вашего основного проекта.

    так .. Это то, что у меня хорошо сработало!

    Основной пакет проекта.json Фрагмент файла:

      "имя": "название-основного-проекта",
      "версия": "0.0.0",
      "scripts": {
        «нг»: «нг»,
        ...
        "preinstall": "cd ../some-npm-package-angular && npm install && npm run build"
      },
      "частный": правда,
      "dependencies": {
        ...
        "@ com / some-npm-package-angular": "файл: ../ some-npm-package-angular / dist",
        ...
      }
      

    Этим достигается 3 вещи:

    • Избегает распространенной ошибки (по крайней мере, в проектах angular npm) index.ts не является частью компиляции. «- поскольку он указывает на папку build (dist).
    • Добавляет этап предварительной установки для сборки указанного клиентского пакета npm, чтобы убедиться, что создана папка dist нашего зависимого пакета.
    • Избегает проблем, когда ссылка на файл tar.gz локально может быть кэширована npm и не обновлена ​​в основном проекте без большой очистки / устранения неполадок / перекомпоновки / переустановки.

    Надеюсь, это понятно и кому-то поможет.

    Деготь.гз подход тоже вроде работает ..

    npm install (путь к файлу) тоже вроде работает.

    Все это было основано на сгенерированном клиенте из спецификации openapi, который мы хотели сохранить в отдельном месте (вместо того, чтобы использовать копировальную пасту для отдельных файлов).

    ======
    ОБНОВЛЕНИЕ:
    ======

    При обычном процессе разработки с вышеуказанным решением возникают дополнительные ошибки, так как схема управления версиями npm с локальными файлами абсолютно ужасна.Если ваш зависимый пакет часто меняется, вся эта схема нарушается, потому что npm будет кэшировать вашу последнюю версию проекта, а затем взорвется, когда хеш SHA больше не совпадает с тем, что было сохранено в вашем файле package-lock.json, среди других проблем .

    В результате я рекомендую использовать подход * .tgz с обновлением версии для каждого изменения. Это работает за счет трех вещей.

    Первый:

    Для вашего зависимого пакета используйте библиотеку npm «ng-packagr».Это автоматически добавляется в автоматически сгенерированные клиентские пакеты, созданные генератором кода angular-typescript для OpenAPI 3.0.

    В результате в проекте, на который я ссылаюсь, есть раздел «сценарии» в package.json, который выглядит следующим образом:

      "скриптов": {
        "build": "ng-packagr -p ng-package.json",
        "пакет": "npm install && npm run build && cd dist && npm pack"
      },
      

    И проект, ссылающийся на этот другой проект, добавляет этап предварительной установки, чтобы убедиться, что зависимый проект обновлен и перестроен перед сборкой:

      "скриптов": {
        "preinstall": "npm run clean && cd../some-npm-package-angular && npm run package "
      },
      

    Второй

    Ссылка на встроенный пакет tgz npm из вашего основного проекта!

      "зависимости": {
        "@ com / some-npm-package-angular": "файл: ../ some-npm-package-angular / dist / some-npm-package-angular-  .tgz",
        ...
      }
      

    Третий

    Обновляйте версию зависимого пакета КАЖДЫЙ раз, когда вы обновляете зависимый пакет. Вам также необходимо обновить версию в основном проекте.

    Если вы этого не сделаете, NPM будет задыхаться и использовать кэшированную версию и взорваться, когда хэш SHA не совпадает. NPM версии файловых пакетов на основе изменения имени файла. Он не будет проверять сам пакет на наличие обновленной версии в package.json, и команда NPM заявила, что они не будут это исправлять, но люди продолжают поднимать проблему: https://github.com/microsoft/WSL/issues/ 348

    сейчас, просто обновите:

      "версия": "1.0.0-build5",
      

    В пакете зависимого пакета.json, а затем обновите ссылку на него в основном проекте, указав новое имя файла, например:

    .

      "зависимости": {
           "@ com / some-npm-package-angular": "файл: ../ some-npm-package-angular / dist / some-npm-package-angular-1.0.0-build5.tgz",
            ...
    }
      

    К этому привыкаешь. Просто обновите два файла package.json — версию, а затем ссылку на новое имя файла.

    Надеюсь, что кому-то поможет …

    node.js — NPM: после «npm link» модуль не найден

    Я разрабатываю два модуля для NodeJS: первый называется aligator , а второй — aligator-methods .Второй зависит от первого, чтобы работать. Я разрабатываю эти два модуля одновременно, и я хочу глобально связать aligator , чтобы я мог использовать его, как в реестре npm, и я только что установил его глобально. Для этого в документации NPM указано, что мне нужно использовать ссылку npm , но она не работает.

    Файл package.json модуля aligator :

      {
      "имя": "алигатор",
      "версия": "0.0.1",
      "описание": "",
      "main": "index.0,0.1 "
     }
    }
      

    Первым делом я связал модуль глобально:

      $ cd ~ / aligator
    ссылка $ npm
    / usr / local / lib / node_modules / aligator -> / Users / roc / aligator
      

    Это, если я не ошибаюсь, создало глобальную ссылку на мой модуль aligator , и теперь я могу использовать этот модуль где угодно на компьютере.

    Затем я перешел к другому модулю и попытался установить зависимость, но он дал мне следующий результат:

      $ cd ~ / aligator-methods
    $ npm install
    npm ERR! 404 404 Не найдено: аллигатор
    npm ERR! 404
    npm ERR! 404 'aligator' отсутствует в реестре npm.npm ERR! 404 Вы должны поставить автора на ошибку, чтобы опубликовать это
    npm ERR! 404 Это было указано как зависимость 'aligator-methods'
    npm ERR! 404
    npm ERR! 404 Обратите внимание, что вы также можете установить из
    npm ERR! 404 tarball, папка, URL-адрес http или URL-адрес git.
    
    npm ERR! Система Дарвина 13.2.0
    npm ERR! команда "узел" "/ usr / local / bin / npm" "установить"
    npm ERR! cwd / Пользователи / roc / aligator-methods
    npm ERR! узел -v v0.10.28
    npm ERR! npm -v 1.4.16
    npm ERR! код E404
    npm ERR!
    npm ERR! Дополнительные сведения о ведении журнала можно найти в:
    npm ERR! / Пользователи / roc / aligator-methods / npm-debug.бревно
    npm ERR! не в порядке код 0
      

    Я даже пытался связать его напрямую с:

      $ cd ~ / aligator-methods
    $ npm ссылка aligator
    / Пользователи / roc / aligator-methods / node_modules / aligator -> / usr / local / lib / node_modules / aligator -> / Users / roc / aligator
      

    Но и это не сработало.

    Есть мысли о том, что может происходить? Я где-то читал, что, возможно, это как-то связано с моей установкой узла и npm , потому что он был сделан Homebrew, и поэтому иногда мне нужно использовать sudo , это казалось маловероятным, но я пробовал то, что они предлагали, и Это тоже не сработало.

    Использование npm-link для разработки пакетов — Terodox.tech

    Изображение на обложке: JJ Ying

    При написании значительного количества вызовов API на javascript я разочаровывался в процессе проверки полезной нагрузки каждого вызова. Работая с моей командой, мы придумали небольшой простой метод, который позволил бы нам написать класс для каждого ответа API, а затем принудить ответ к этому классу.

    Этот код универсален, и, скопировав его в несколько проектов, мы знали, что пришло время для пакета npm.

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

    npm-link в помощь

    npm link предоставляет инструменты, необходимые как для разработки, так и для локального использования пакета npm.

    Мы начали с создания нового модуля npm под названием @ meltwater / coerce . Этот модуль содержал простой метод из 10 строк, который мы использовали для приведения типов на основе классов.

    Локальный пакет npm

    Нам нужно сделать модуль доступным для локальной установки.

      компакт-диск локальный / git / папка / coerce
    npm ссылка  

    Результат этого помогает нам понять, что на самом деле здесь происходит.

      / путь / к / global / node / modules / node_modules / @ meltwater / coerce -> / local / git / folder / coerce  

    В нашей глобальной папке node_modules была создана символическая ссылка, которая указывает на нашу локальную версию принуждения. Обратите внимание, что имя пакета используется в папке node_modules .Это будет соответствовать полю name в вашем package.json.

    Использование локального пакета npm

    Теперь нам нужно сослаться на вновь созданную ссылку из проекта, из которого мы удаляем этот код.

      компакт-диск локальный / git / folder / main-project
    npm link @ талая вода / coerce  

    Обратите внимание, что мы ссылаемся на имя пакета, а не на имя папки! Проверив вывод еще раз, мы увидим цепочку символических ссылок:

      / local / git / folder / main-project / node_modules / @ meltwater / coerce -> / path / to / global / node / modules / node_modules / @ meltwater / coerce -> / local / git / folder / coerce  

    Теперь, когда мы создали ссылку в основном проекте, протестировать ее локально так же просто, как заменить ссылки в наших файлах из:

      принуждение к импорту из '../coerce ';  

    С

    по

      принуждение к импорту из "@ meltwater / coerce";  

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

    Уборка, когда мы закончили

    Теперь, когда мы протестировали и все в порядке, мы должны очистить нашу локальную среду. Подобно npm link , есть команда npm unlink , и она работает точно так, как вы ожидаете.

      компакт-диск локальный / git / папка / coerce
    npm unlink  

    В основном проекте нам нужно разорвать связь, но нам также нужно сослаться на недавно опубликованный пакет:

      компакт-диск локальный / git / folder / main-project
    npm un`link @ meltwater / coerce
    npm i @ талая вода / coerce  

    Краткое описание

    npm link дает нам инструменты, необходимые как для записи, так и для проверки пакетов npm локально. Это очень простой инструмент, который дает нам отличный способ проверить любой новый или обновленный пакет перед публикацией.

    Как использовать npm link для разработки общих компонентов

    Почему «ссылка npm»?

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

    Готовы вдохновиться?

    Спасибо за регистрацию

    Подпишитесь на нашу новостную рассылку, чтобы получать советы экспертов и вдохновляющие примеры

    Ваше приветственное письмо уже в пути! Вы можете выбрать электронные письма, которые хотите получать, щелкнув ссылку в Центре настроек.

    Например, у одного из наших клиентов мы с моими коллегами отвечаем за общий компонент под названием Search Component . Как и многие из «общих» библиотек, используемых в этом конкретном проекте, Search Component публикуется и доступен из частного репозитория Artifactory. Его можно вставить в любом месте приложения (обычно в заголовок), что позволяет пользователю легко выполнять поиск по содержимому сайта и мгновенно просматривать сводку результатов.

    Вверху: компонент поиска — это настраиваемый узел узла, который можно вставить в любое место родительского приложения

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

    Это было особенно верно для меня, когда дело дошло до работы с Search Component . После того, как приложение было запущено, изменение Search Component на месте после этого не привело бы к каким-либо наблюдаемым изменениям , а не .

    К счастью, диспетчер пакетов узлов ( npm ) может значительно упростить разработку с зависимостями с помощью команды npm link .

    в двух словах о npm link

    Документация npm определяет npm link как ‘означает символическую ссылку на папку пакета’ . Проще говоря, это средство для подключения вашего родительского приложения к модулю, который у вас есть локально на вашем компьютере. Когда вы запускаете приложение, любые изменения, которые вы вносите в зависимость, будут отражены в приложении.


    Как «ссылка npm»

    1. В терминале перейдите в папку зависимости, которую вы хотите изменить, и выполните команду npm link .Это делает компонент глобально доступным для остальной части вашего приложения.

    2. Перейдите к папке родительского приложения (т.е. той, которая зависит от модуля, который вы хотите изменить). В корне выполните команду npm link [имя модуля, который вы хотите изменить]

    3. Затем запустите и родительское приложение, и зависимость модуля, затем начните вносить изменения в зависимость в соответствии с вашими пожеланиями. Кроме того, использование библиотеки, которая отслеживает изменения в вашем коде и перестраивает ваше приложение, например Nodemon, будет иметь важное значение для того, чтобы избавить вас от постоянного перезапуска приложения.

    4. Наконец, когда у вас есть все изменения (плюс тесты!), Перейдите в папку родительского приложения и отключите зависимость, используя npm unlink [имя модуля, который вы изменили] . Это удалит локальную зависимость от родительского приложения. Точно так же перейдите в папку зависимости, которую вы изменили, и запустите npm unlink , чтобы больше не делать модуль глобально доступным.

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

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