Ссылка на npm не заботится о "файлах" в package.json или.npmignore

Моя цель - указать, какие файлы будут включены в модуль моего узла, прежде чем публиковать его, и иметь возможность локально протестировать установку. Использование "файлов" в package.json работает так: если я опубликую свой пакет и установлю его, я получу только то, что было указано в "файлах".

Это не тот случай, когда я использую ссылку npm. Будь то "файлы" в package.json или.npmignore, ссылка на npm всегда дает мне каждый файл. Как я могу проверить установку моих модулей локально, как это?

Пример:

cd ~/projects/node-redis    # go into the package directory
npm link                    # creates global link
cd ~/projects/node-bloggy   # go into some other package directory.
npm link redis              # link-install the package

Если ~/projects/node-redis содержит "files: [lib]" в своем package.json, вы можете ожидать, что только lib будет отображаться в ~/projects/node-bloggy после запуска "npm link redis", но это не так. дело.

Кроме того: я люблю ноды и npm, но если вы посмотрите на то, что находится в ваших модулях нод, то в readme используется так много посторонних файлов, как PNG. Модули смехотворно огромны из-за этого.

0 ответов

Обходной путь: npm install URL-адрес репозитория GIT

Вы можете установить пакет из репозитория GIT, например

npm install https://github.com/AndreasPizsa/parse-decimal-number.git

Это актуальный npm install который уважает files запись, даже если пакет еще не был опубликован в репозитории npm.


Задний план

npm link не копирует, создает ссылку

npm linkэто не на самом деле установить пакет, скопировав его в целевую папку.

Вместо этого он создает символическую ссылку на исходную папку, поэтому вы видите все файлы, которые находятся в исходной папке ("node-redis"), а не только те, которые указаны вfiles.

Это поведение задокументировано в npm link документация:

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

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

https://docs.npmjs.com/cli/link.html

"Что такое символическая ссылка?" вы можете спросить:

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

https://en.wikipedia.org/wiki/Symbolic_link

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

... и бег тоже npm install локально

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

cd ~/projects/node-bloggy
npm install ~/projects/node-redis

Это создаст символическую ссылку под node_modules в вашем node-bloggy проект.

Другие вопросы по тегам