Как развернуть узел.приложение 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 к сожалению, не вариант :)
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.короткая версия
npm lsчтобы получить список всех установленных модулей.- просмотрите эти модули и определите дубликаты модулей (это важно)
npm install module@version --save-devчтобы установить эти модули в корневой каталог node_modules и пакет обновления.формат JSON.rmdir node_modulesдля удаления каталог node_modules.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