4 ответа
Лучший ответ
Есть положительные стороны, связанные с меньшим количеством вложенных папок, и недостаток — наличие большего количества папок в папке node_modules напрямую, а также проблемы с контролем версий.
Используйте правильную версию npm
Правильный и (то есть: npm v3) не должны иметь такой структурной проблемы. Он должен всегда выравнивать всю структуру, где это возможно, и иметь вложенные node_modules только в том случае, если версии несовместимы с версией сверху.
Проверьте версии
Так что если у вас он работает правильно на одном проекте, а не на другом, это, вероятно, из-за версии. Проверьте, является ли одинаковой версией для обоих. Возможно, в какой-то момент два разных пакета конфликтуют друг с другом.
Проверьте, как вы их устанавливаете
От твоего вопроса он говорит, что это та же версия. Тем не менее, вы не упомянули, как вы установили свой пакет в обоих проектах. Если вы устанавливаете с или , он должен установить зависимости должным образом, как и ожидалось.
Проверьте, используете ли вы разные пакеты
Если вы проверите пакет, недавно устарел, и вместо этого в уведомлении говорится, что нужно обновить его до . Возможно, некоторые пакеты внутри этой папки не совпадают. В любом случае, так происходит всякий раз, когда возникает конфликт зависимости. Проверьте внутри папки .
Сгладить их вручную (опасно)
Есть несколько пакетов, чтобы решительно решить эту проблему. Они пройдут через вложенные папки node_modules и сведут их в одну папку.
- Установить с помощью .
- Запустите исполняемый файл , чтобы переставить все пакеты в папке node_modules в каталоге проекта.
- Flatten удалит более старую версию пакета. Вы должны позаботиться об ошибках, связанных с изменением версии.
16
Md. Abu Taher
10 Авг 2018 в 13:10
У меня есть еще одно дополнение к принятому ответу:
Очистить локальную папку node_modules Cache
Обращайтесь с осторожностью. Иногда при переносе проектов в новые модули npm могут возникать странные проблемы с кешем в папке , особенно те, которые были в наличии некоторое время или имели новее версии пакетов, установленных в зависимостях , которые отличаются от установленной версии в корневом каталоге
Как только вы удалите прямые зависимости через зависимости package.json, пакеты будут удалены из . Это может привести к ошибке, когда новые модули по-прежнему вложены в вашу зависимость, а не перемещены в корневой каталог, как ожидалось.
Таким образом, уничтожив ваши локальные node_modules , вы можете выполнить чистую переустановку и позволить сглаживанию работать.
Cameron
25 Мар 2020 в 23:49
У меня была такая же проблема в приложении React Native с моим пакетом NPM. Проблема заключалась в том, что в проекте A использованная версия React Native была (0.59.5) ниже версии, используемой в моем пакете (0.59.8). При установке пакета в совершенно новый проект (B), конечно, в тот момент использовалась последняя версия React Native, которая была такой же, как и мой пакет (0.59.8).
kudo44
4 Июн 2019 в 13:24
Вы можете использовать команду для этого.
Вы можете поместить команду в скрипт в , и каждый раз, когда NPM устанавливает пакет, команда сглаживает все дублированные пакеты в одной и той же версии для вас.
Для получения дополнительной информации см. https://docs.npmjs.com/cli/dedupe.
3
RaynorChan
29 Апр 2019 в 04:07
Все вместе…¶
Чтобы получить точное имя файла, которое будет загружено при называется, используйте функция.
Объединив все вышеперечисленное, вот высокоуровневый алгоритм в псевдокоде того, что делает:
require(X) from module at path Y 1. If X is a core module, a. return the core module b. STOP 2. If X begins with '/' a. set Y to be the filesystem root 3. If X begins with './' or '/' or '../' a. LOAD_AS_FILE(Y + X) b. LOAD_AS_DIRECTORY(Y + X) c. THROW "not found" 4. If X begins with '#' a. LOAD_PACKAGE_IMPORTS(X, dirname(Y)) 5. LOAD_PACKAGE_SELF(X, dirname(Y)) 6. LOAD_NODE_MODULES(X, dirname(Y)) 7. THROW "not found" LOAD_AS_FILE(X) 1. If X is a file, load X as its file extension format. STOP 2. If X.js is a file, load X.js as JavaScript text. STOP 3. If X.json is a file, parse X.json to a JavaScript Object. STOP 4. If X.node is a file, load X.node as binary addon. STOP LOAD_INDEX(X) 1. If X/index.js is a file, load X/index.js as JavaScript text. STOP 2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP 3. If X/index.node is a file, load X/index.node as binary addon. STOP LOAD_AS_DIRECTORY(X) 1. If X/package.json is a file, a. Parse X/package.json, and look for "main" field. b. If "main" is a falsy value, GOTO 2. c. let M = X + (json main field) d. LOAD_AS_FILE(M) e. LOAD_INDEX(M) f. LOAD_INDEX(X) DEPRECATED g. THROW "not found" 2. LOAD_INDEX(X) LOAD_NODE_MODULES(X, START) 1. let DIRS = NODE_MODULES_PATHS(START) 2. for each DIR in DIRS: a. LOAD_PACKAGE_EXPORTS(X, DIR) b. LOAD_AS_FILE(DIR/X) c. LOAD_AS_DIRECTORY(DIR/X) NODE_MODULES_PATHS(START) 1. let PARTS = path split(START) 2. let I = count of PARTS - 1 3. let DIRS = 4. while I >= 0, a. if PARTS = "node_modules" CONTINUE b. DIR = path join(PARTS + "node_modules") c. DIRS = DIRS + DIR d. let I = I - 1 5. return DIRS LOAD_PACKAGE_IMPORTS(X, DIR) 1. Find the closest package scope SCOPE to DIR. 2. If no scope was found, return. 3. If the SCOPE/package.json "imports" is null or undefined, return. 4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE), ) . 5. RESOLVE_ESM_MATCH(MATCH). LOAD_PACKAGE_EXPORTS(X, DIR) 1. Try to interpret X as a combination of NAME and SUBPATH where the name may have a @scope/ prefix and the subpath begins with a slash (`/`). 2. If X does not match this pattern or DIR/NAME/package.json is not a file, return. 3. Parse DIR/NAME/package.json, and look for "exports" field. 4. If "exports" is null or undefined, return. 5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), "." + SUBPATH, `package.json` "exports", ) . 6. RESOLVE_ESM_MATCH(MATCH) LOAD_PACKAGE_SELF(X, DIR) 1. Find the closest package scope SCOPE to DIR. 2. If no scope was found, return. 3. If the SCOPE/package.json "exports" is null or undefined, return. 4. If the SCOPE/package.json "name" is not the first segment of X, return. 5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE), "." + X.slice("name".length), `package.json` "exports", ) . 6. RESOLVE_ESM_MATCH(MATCH) RESOLVE_ESM_MATCH(MATCH) 1. let { RESOLVED, EXACT } = MATCH 2. let RESOLVED_PATH = fileURLToPath(RESOLVED) 3. If EXACT is true, a. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension format. STOP 4. Otherwise, if EXACT is false, a. LOAD_AS_FILE(RESOLVED_PATH) b. LOAD_AS_DIRECTORY(RESOLVED_PATH) 5. THROW "not found"
Используйте правильную версию npm
Правильный и (то есть: npm v3) не должны иметь такой структурной проблемы. Он должен всегда выравнивать всю структуру, где это возможно, и иметь вложенные node_modules только в том случае, если версии несовместимы с версией сверху.
Проверьте версии
Так что если у вас он работает правильно на одном проекте, а не на другом, это, вероятно, из-за версии. Проверьте, является ли одинаковой версией для обоих. Возможно, в какой-то момент два разных пакета конфликтуют друг с другом.
Проверьте, как вы их устанавливаете
От твоего вопроса он говорит, что это та же версия. Тем не менее, вы не упомянули, как вы установили свой пакет в обоих проектах. Если вы устанавливаете с или , он должен установить зависимости должным образом, как и ожидалось.
Проверьте, используете ли вы разные пакеты
Если вы проверите пакет, недавно устарел, и вместо этого в уведомлении говорится, что нужно обновить его до . Возможно, некоторые пакеты внутри этой папки не совпадают. В любом случае, так происходит всякий раз, когда возникает конфликт зависимости. Проверьте внутри папки .
Сгладить их вручную (опасно)
Есть несколько пакетов, чтобы решительно решить эту проблему. Они пройдут через вложенные папки node_modules и сведут их в одну папку.
Обновленный ответ
Теперь, когда вы получаете следующую ошибку:
Я раскопал еще и обнаружил, что ваш использует версию , которая, в свою очередь, использует . Если вы перейдете на npm @ babel-eval-plugin, вы найдете там репозиторий github ссылка которые больше не существуют и переместите в npm @ babel-plugin-transform-eval. Следовательно, эта проблема может возникнуть.
В целом, в вашей версии ember-cli есть несколько не поддерживающих библиотек. Я предлагаю вам обновить версию ember-cli, как указано в документации к выпуску .
npm install -g [email protected] rimraf rimraf node_modules dist tmp npm install --save-dev [email protected] npm install ember init
Я также предлагаю повторно клонировать ваш репозиторий в новом месте и попробовать эти инструкции.
Загрузка из глобальных папок¶
Если Переменная среды установлена в список абсолютных путей, разделенных двоеточиями, тогда Node.js будет искать по этим путям модули, если они не найдены где-либо еще.
В Windows разделяется точкой с запятой () вместо двоеточия.
изначально был создан для поддержки загрузки модулей с разных путей до текущего алгоритм был определен.
все еще поддерживается, но теперь он менее необходим, когда экосистема Node.js установила соглашение о размещении зависимых модулей. Иногда развертывания, основанные на проявлять удивительное поведение, когда люди не знают, что должен быть установлен. Иногда зависимости модуля меняются, в результате чего другая версия (или даже другой модуль) загружается как ищется.
Кроме того, Node.js будет искать в следующем списке GLOBAL_FOLDERS:
- 1:
- 2:
- 3:
Где домашний каталог пользователя, и настроен ли Node.js .
Это в основном по историческим причинам.
Настоятельно рекомендуется размещать зависимости в локальном папка. Они будут загружаться быстрее и надежнее.
Установка определённой версии пакета
Установим ещё один пакет и поговорим о его возможных версиях
$ npm install normalize.css
Если package.json не содержит записи о normalize.css то будет установлена последняя стабильная версия.
Если в package.json указана версия, будет установлена она.
Если Вы хотите установить какую-то определённую версию, укажите её в package.json либо
введите @номер_версии при установке.
Например npm install normalize.css@8.0.1
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
+ [email protected]
added 1 package and audited 2 packages in 0.523s
found 0 vulnerabilities
Посмотрим содержимое файла package.json и заодно узнаем какие версии пакетов установлены
$ vi package.json
Публикация пакета npm
Для начала вам нужно создать пользователя в репозитории npm:
npm adduser
1 | npm adduser |
Если же у вас уже есть пользователь, созданный на сайте, то можете сохранить его логин и пароль:
npm login
1 | npm login |
Для публикации пакета используйте команду:
npm publish
1 | npm publish |
Имейте в виду, что опубликовано будет всё, что не добавлено в игнорируемые в «.gitignore» или «.npmignore».
Перейдите на
https://npmjs.com/package/<package>. Вы должны увидеть информацию о вашем пакете.
Для обновления версии используйте одну из команд:
npm update patch
1 | npm update patch |
или
npm update minor
1 | npm update minor |
или
1 | npm update major |
А затем опубликуйте его снова:
npm publish
1 | npm publish |
Одно решение, которое я использую:
(Я бы предпочел не устанавливать новое расширение (rimraf) при работе со средами CI.)
- А) Переименуйте файл packages.json во что-нибудь другое. Б) Специально для CI — после установки npm я обычно удаляю файл, а не переименовываю его, но если он вам нужен, вам не нужно этого делать. Это ваш выбор.
- бегать — это создаст пустой файл (без зависимостей)
- бегать — это будет соответствовать node_modules с разделом зависимостей — который теперь пуст в результате шага №2.
- Если вы выбрали # 1.А. шаг, удалите вновь созданный , и переименовать оригинал вернуться к своему первоначальному названию.
Это слишком просто.
Просто удалите все папки внутри node_modules, а затем удалите фактическую папку node_module.
Это работает для меня. Удачи ….
Честно говоря, это более быстрый способ, но требуется много терпения. Еще лучше, если вы удаляете по несколько папок за раз.
Иногда, даже если вы устанавливаете глобально у вас может быть местный зависимость (обычно она есть в SASS). В этом случае я бы выполнил следующие команды:
Выполните первые 2 шага в соответствии с рекомендациями usagidon. Если у вас есть проблемы или ошибки, попробуйте
это удалит локальный и использовать глобальный
В Windows мой переход к решению использует команда:
Если не получилось с первого раза — попробуйте еще раз. Также проверьте, есть ли у вас запущенные скрипты, в настоящее время использующие модули ( или похожие).
Мне нужно было очистить весь каталог Projects для целей резервного копирования, поэтому я установил rimraf и запустил его в корневом каталоге (внутри приглашения git bash):
Очень эффективен, действительно рекурсивен (избегает дочерних node_modules) и быстро работает с окнами (благодаря rimraf).
- https://rtmccormick.com/2018/01/10/clear-node-modules-folders-recursively-mac-linux/
- Принятый ответ на этот вопрос, который предлагает римраф, но не имеет рекурсивного аспекта
Думаю, раньше об этом не упоминалось. но лучший способ удалить ненужные заключается в установке утилиты под названием .
3 ответа
3
Лучший ответ
Проверьте текущий каталог. Он должен содержать файл package.json с надлежащей структурой и зависимостями.
Если у вас нет файла package.json, вы создаете проект с нуля. В этом случае вы можете создать файл package.json, используя следующую команду.
и установите пакеты с предоставлением имени пакета командой npm install. например если вы хотите установить экспресс-пакет. используйте следующую команду
Здесь опция -save обновит файл package.json с пакетом и его версией.
27 июнь 2016, в 07:03
Поделиться
1
Проблема кажется самоописательной
не может найти файл в папке
Вы можете запустить npm init в папке. Это задаст ряд вопросов, связанных с проектом, и в конце создаст файл package.json.
Затем вы можете запустить в папке для установки зависимостей
27 июнь 2016, в 07:48
Поделиться
1
Попробуйте с помощью
27 июнь 2016, в 06:30
Поделиться
Ещё вопросы
- 1Как добавить значение в список внутри другого списка?
- 1Объявление и поведение переменных окна JS
- 1Android отправляет данные на сервер (очень мало базовых знаний)
- 1Почему сообщения IPC от одного элемента меню в Electron выглядят так, как будто они достигают моего окна, а не при отправке из другого меню?
- ko.com определяется как не использующий значения в Viewmodel od knockout
- 2Как освободить виртуальные / личные байты настольного приложения в c #
- 1Python Чтение файлов CSV в столбце?
- Как я могу вставить новую строку в таблицу, используя Hibernate?
- Повышение угловых характеристик в пользовательском раскрывающемся меню с функцией фильтрации с односторонним связыванием
- 1Как открыть новый JFrame с JButton из другого класса
- AngularJS множественное включение
- Как скрыть системное сообщение об ошибке при добавлении дубликатов данных в MySQL DB с помощью Perl?
- 1Подключение к онлайн-базе данных SQL
- 1Как поделиться значением переменных между двумя запущенными приложениями Android
- 1Python — удаление дубликатов в списке только с помощью фильтра и лямбда
- HTML пользовательский шрифт на Bootstrap не будет работать
- Высота анимации при обновлении контента в реальном времени / jquery
- Как использовать результаты из базы данных в JQuery
- 1Как освободить соединение с базой данных Oracle при выходе из nodejs
- Удалить кэшированные изображения из мобильного приложения ionic angularjs
- Принимаются ли средства позиционирования встроенных CSS-кнопок?
- ext.net, как получить значения двух ячеек из строки при выборе ячейки gridpanel?
- 1Динамический Переключатель в Javascript
- Карма / Жасмин не будет вводить ионный контроллер
- 1Что такое код для проверки размера файла изображения, когда пользователь выбирает файл
- 1Как интегрировать ваше приложение в БЫСТРЫЙ КОНТАКТ на родное приложение контактов на Android?
- 1Ошибка ZendFatal: класс ‘Zend \ Ldap \ Ldap’ не найден
- 1Какой лучший способ поделиться наблюдаемым свойством между различными компонентами в Vue?
- Youtube thumbnail + playicon для ссылок
- 1Можно ли реализовать \ Countable в классе PHP, который не предназначен для повторения?
- Импорт БД в БД AWS RDS
- 1Как получить значения поля путем передачи имени поля в формате сообщения JPOS ISO8583
- 1Python: запустить терминальную программу и проанализировать ее вывод во время работы
- 2Значения контекста AutoMapper в AfterMap?
- 1проверьте месяц и день, игнорируя год, используя объект php datetime
- 1зачем называть две перекраски, если только рисовать конкретную область?
- Как хранить атаки SQL-инъекций в БД
- Оценка строковых констант из перечислений в Intellisense
- Подключение Rest API к Google Charts
- 1Простое сравнение в строке
- 1Подкаталог RewriteCond не работает
- MySQL ВСТАВИТЬ несколько строк НА ДУБЛИКОВАТЬ КЛЮЧ ОБНОВЛЕНИЕ… ГДЕ СУЩЕСТВУЕТ (подзапрос)
- 1Не удается запустить сервер браузера запросов. Arg Invalid
- Как найти ближайший вход с JQuery?
- Что такое AMD API для пользовательского разрешения и синхронизации по времени для NDA-версии NVAPI от NVIDIA?
- 1Coudlnt Сделать переменные центром карты
- 1Какова реальная степень, в которой закрытая переменная безопаснее, чем открытая переменная?
- Передача строки и переменных в атрибут директивы.
- 1Извлечение классификации модели SVM в Python
- ng-options Значение по умолчанию для углового раскрывающегося списка
Идея версионирования: патчи, минорные и мажорные версии
Идея использования трёх чисел, разделённых точками, в качестве версии состоит в следующем (например, если текущий пакет 1.0.0):
- Патчи или исправления ошибок и незначительные изменения увеличивают последнее число (1.0.1).
- Минорные версии. Новые возможности, которые не ломают старый код увеличивают второе число (1.1.0).
- Мажорные версии. Изменения, ломающие совместимость со старым кодом увеличивают самое первое число (2.0.0).
При указании необходимой версии зависимости в «package.json» можно указывать диапазоны:
- 1.0, 1.0.x или ~1.0.4 будет использовать последнюю версию патча с исправлениями ошибок (для третьего варианта начиная с версии 1.0.4).
- 1, 1.x или ^1.0.4 будет использовать последнюю минорную версию.
- * или x всегда будет использовать последнюю версию.