Как развернуть узел.приложение js с глубокой структурой модулей узлов в Windows?



я столкнулся с любопытной проблемой - видимо, какой-то узел.модуль на JS так глубокий иерархия эта команда копирования Windows (или PowerShell Copy-Item что мы на самом деле используем) попадает в печально известную ошибку "путь слишком длинный", когда путь составляет более 250 символов.



например, это иерархия папок, которую может создать один модуль узла:



node_modulesnodemailernode_modulessimplesmtpnode_modules
xoauth2node_modulesrequestnode_modulesform-datanode_modules
combined-streamnode_modulesdelayed-stream...


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



мы необходимо использовать copy-paste во время развертывания (мы не используем "умную" целевую платформу, такую как Heroku, где развертывание Git было бы вариантом), и это серьезное ограничение для Windows.



нет ли команды npm или чего-то, что бы сжать node_modules папка или, может быть, включить только то, что на самом деле необходимо во время выполнения? (модули узла обычно содержат test папки и т. д. которые нам не нужно разворачивать.) Любые другие идеи, как обойти это? Не используя Windows к сожалению, не вариант :)

958   8  

8 ответов:

npm v3 (выпущен недавно) решает эту проблему путем сглаживания зависимостей.. Проверьте примечания к выпуску здесь в https://github.com/npm/npm/releases/tag/v3.0.0 под .

и последний комментарий по этому вопросу https://github.com/npm/npm/issues/3697

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

что даст вам дерево модулей и версий... оттуда довольно легко определить, какие из них являются дубликатами... npm dedupe ничего не сделал для меня. Я не уверен, что это ошибка или что (узел v 10.16)

поэтому, как только вы идентифицируете дубликат модуля, установите его в корневой каталог node_module с помощью npm install [email protected] --save-dev. версия важный.

после этого я уничтожил свой каталог node_modules и сделал свежий npm install.

короткая версия

  1. npm ls чтобы получить список всех установленных модулей.
  2. просмотрите эти модули и определите дубликаты модулей (это важно)
  3. npm install module@version --save-dev чтобы установить эти модули в корневой каталог node_modules и пакет обновления.формат JSON.
  4. rmdir node_modules для удаления каталог node_modules.
  5. npm install чтобы снять новую копию ваших зависимостей.

как только я сделал это, все было намного чище.

Я также рекомендую комментировать ваш пакет.JSON-файл, чтобы показать, какие из них были сбиты, чтобы сгладить дерева папки node_modules.

Я не думаю, что есть какие-отличное решение, учитывая ваши ограничения, но вот некоторые вещи, которые могут помочь.

  • попробуйте использовать npm dedupe для оптимизации иерархии каталогов, которая может сократить некоторые пути
  • использовать npm install --production для установки без средств разработки
  • возьмите некоторые из этих глубоко вложенных зависимостей (достаточно, чтобы избежать проблемы, я предлагаю) и переместите их в каталог node_modules верхнего уровня. Просто следите за ними, чтобы вы знать, какие ваши истинные зависимости и способа решения этой проблемы.
  • или переместите некоторые из этих глубоких зависимостей на самый высокий является GitHub вопрос для обсуждения это подробно рассматривает эту проблему.

Я написал модуль узла под названием "npm-flatten", который выравнивает ваши зависимости для вас здесь:https://www.npmjs.org/package/npm-flatten

Если вы ищете дистрибутив, я также написал пакет NuGet, который будет интегрировать полный узел.среда js с вашим проектом .NET здесь:http://www.nuget.org/packages/NodeEnv/

обратная связь будет приветствоваться.

Что-то, что помогло мне было сопоставить локальный диск с моим узлом.папка js:

сеть использовать N: \имя_компьютера\c\пользователи \ $\мое имя\документы узел\.js / persistent: yes

перед: c:\users\myname\documents\node.js\имя_проекта (45 символов) После: n:\projectname (14 символов, что на 31 символ меньше)

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

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

"C:\Users\myname\Documents\Node.js\angular-phonecat\node_modules\karma\node_modules\chokidar\node_modules\anymatch\node_modules\micromatch\node_modules\regex-cache\node_modules\benchmarked\node_modules\file-reader\node_modules\extend-shallow\benchmark\светильники слишком длинные."

даже когда я попытался создать их резервную копию с помощью буквы N: drive, в некоторых случаях это все равно не удалось из-за длины пути, но этого было достаточно, чтобы исправить один выше.

1) во время сборки выпуска вы можете запретить Visual studio сканировать эти файлы / папки, установив свойства папки как скрытая папка (просто установите его в node_modules). Ссылка: http://issues.umbraco.org/issue/U4-6219#comment=67-19103

2) Вы можете исключить файлы или папки, опубликованные во время упаковки, включив следующий узел XML в файл CsProject.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <OutputPath>bin\</OutputPath>
   <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
  <ExcludeFilesFromDeployment>File1.aspx;File2.aspx</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment>
</PropertyGroup>

Я нашел одно решение от Узел Microsoft.руководящие принципы в JS.

  • начать с короткого пути (например c:\src)
  • > npm install -g rimraf удалить файлы, которые превышают max_path
  • > npm dedupe перемещение дубликатов пакетов на верхний уровень
  • > npm install -g flatten-packages перемещает все пакеты на верхний уровень, но может вызвать проблемы с версиями
  • обновить npm@3 который пытается сделать node_modules папка heirarchy максимально плоский.
    • поставляется с узлом v5
    • или... > npm install –g npm-windows-upgrade

Это не правильное решение, а обходной путь, когда вы находитесь в спешке, но вы можете использовать 7-Zip в zip папку, переместить архивный файл и распаковать его без каких-либо проблем.

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

Comments

    Ничего не найдено.