Файл описания модуля module root не найден
Прим. перев.: для понимания данной статьи необходимо обладать начальными знаниями Angular: что такое компоненты, как создать простейшее SPA приложение и т.д. Если Вы не знакомы с данной темой, то рекомендую для начала ознакомиться с примером создания SPA приложения из оф. документации.
Вступление
@NgModule — декоратор, добавленный в Angular 2. Из официальной документации следует, что @NgModule определяет класс, как модуль Angular. Модули Angular помогают разбивать приложение на части (модули), которые взаимодействуют между собой и представляют в конечном итоге целостное приложение. Иными словами, модуль — это упаковка или инкапсуляция части функционала приложения. Модули можно проектировать с учетом многократного использования, т.е. не зависящие от конкретной реализации приложения.
Обратите внимание, что если вы хотите реализовать lazy load в Вашем приложении, то необходимо использовать концепцию Angular Modules при проектировании приложения.
Корневой модуль (Root Module)
Корневой модуль в приложении Angular используется в качестве точки входа. Модуль — это класс, который декорирован при помощи @NgModule . Взглянем на стандартный код модуля (например, при создании нового проекта через ng new project-name генерируется такой AppModule :
В качестве аргумента в декораторе @NgModule используется JavaScript объект.
В свойстве declarations мы объявляем компоненты, которые содержит наш модуль. В данном случае это компонент AppComponent . Компонентов может быть несколько, они объявляются через запятую (как в обычном JavaScript массиве).
Предположим, что наш компонент имеет селектор my-app . Когда в шаблоне HTML мы пишем <my-app></my-app> приложение загружает компонент.
Как происходит загрузка компонента в DOM?
AppModule сообщает браузеру, что необходимо встроить в DOM компонент AppComponent .
Каким образом AppModule добавляет компонент в DOM?
AppModule импортирует служебные модули Angular, например
BrowserModule , отвечающий за работу приложения в браузере. По сути это сервис, который взаимодействует с нашим кодом (например AppComponent ) и API браузера. BrowserModule также включает в себя директивы NgIf и NgFor , который мы можем использовать в шаблонах компонентов.
AppModule выступает в роли связующего между данными, их представлением и браузером.
Компоновка приложения
Использование приложение Angular начинается с файла main.ts , более подробно читайте мануал.
В примере выше мы используем динамическую компиляцию (JIT — Just In Time). Однако в Angular можно реализовать AOT-компиляцию (Ahead of Time), однако это обширная тема и будет рассмотрена в другой статье.
Декларирование (объявление)
В наших приложения мы создаем свои компоненты, директивы и пайпы. Мы можем сообщить нашему приложению о том, какой функционал мы хотим добавить (компоненты, директивы и пайпы) путем перечисления их в свойстве declarations объекта, который является аргументом для декоратора @NgModule :
После объявления компонентов мы можем использовать их внутри других компонентов через их селектор, который указывается в описании компонента.
Импортирование и вложенные модули
Мы импортируем BrowserModule в AppModule , который в свою очередь импортирует CommonModule , который и содержит директивы NgIf и NgFor , доступные в Angular из коробки. Импортируя CommonModule мы получаем доступ к функционалу, реализованный в данном модуле во всем приложении.
Провайдеры
Часто в наших приложениях есть сервисы, которые мы хотим использовать в нескольких (или во всех) компонентах. Как предоставить всем компонентам доступ к сервису? Использовать Angular Modules.
Для этого необходимо добавить провайдер в корневой модуль, в нашем случае AppModule . В Angular добавление зависимостей реализовано при помощи паттерна Dependency Incetion. Когда мы добавили провайдер в корневой модуль AppModule , он будет доступен в любой части приложения.
Когда мы представили эти сервисы в корневом модуле AppModule они доступны в компонентах приложения:
Опишем, как это работает. Мы добавили в конструктор нашего компонента создание объекта провайдера, выглядит это примерно так:
При создании экземпляра компонента (например, когда мы открыли страницу, где используется компонент) одновременно создается объект сервиса, описанный в свойстве providers (см. листинг app.module.ts выше) и Angular начинает искать класс этого сервиса в родительских компонентах. Т.к. мы не объявляли провайдер в компонентах, в конечном итоге Angular найдет этот сервис в корневом модуле AppModule . Следует отметить, что провайдер в Angular реализуют паттерн Singleton, так что в приложении может быть создан только один экземпляр класса сервиса. В нашем случае, если экземпляр сервиса уже был где-то создан, то компонент будет использовать его, если нет, то создаст объект сервиса.
Заключение
Провайдеры, на мой взгляд, одна из самых интересных и сложных концепций модульной системы Angular. Основное правило использования провайдеров (сервисов) — создать экземпляр сервиса в корневом модуле и передавать по запросу этот экземпляр в другие части (компоненты) приложения.
После вытаскивания модуля из GitHub и следуя инструкциям по его созданию, я пытаюсь потянуть его в существующий проект, используя:
Это похоже на трюк:
Но Node.js не может найти модуль:
Я действительно хочу понять, что здесь происходит, но я немного потеряю, где смотреть дальше. Любые предложения?
спросил(а) 2012-01-26T21:57:00+04:00 9 лет, 10 месяцев назадИспользование npm install устанавливает модуль только в текущий каталог (в подкаталоге node_modules ). Является ли app.js находящимся под home/dave/src/server/ ? Если нет, и вы хотите использовать модуль из любого каталога, вам необходимо установить его глобально с помощью npm install -g .
Обычно я устанавливаю большинство пакетов локально, чтобы они проверялись вместе с моим кодом проекта.
Обновление (3/2016):
ответил(а) 2012-01-26T22:15:00+04:00 9 лет, 10 месяцев назадУ меня была очень похожая проблема. Удаление всей папки node_modules и повторная установка работали для меня:
ответил(а) 2015-05-25T13:30:00+03:00 6 лет, 6 месяцев назадНапример, если ошибка:
то вы можете решить эту проблему, выполнив команду npm install --save form-data .
ответил(а) 2015-06-17T11:51:00+03:00 6 лет, 5 месяцев назадЭто происходит, когда по какой-либо причине произошла первая установка npm (SIGINT of npm), или если задержка была слишком большой или данные повреждены. Повторная попытка установки npm не спасет проблему.
Что-то пошло не так при первой проверке npm, поэтому лучший выбор - удалить файл и перезапустить установку npm.
Команда импортирует определения NodeJS TypeScript в ваш проект, позволяя вам использовать встроенные модули Node.
Если вы используете nvm, убедитесь, что существующие модули_узлов, которые являются привязками к другим библиотекам, скомпилированы для правильной версии Node.js.
У меня была такая же ошибка. Причина была в следующем: мы используем nvm, так как на сервере мы запускаем два приложения, одно требует Node.js 5.6, потому что он использует node-gd (который пока не работает на Node.js 6), другое требует Node.js 6. Node.js 6 - это установка apt-get.
Также мы используем инструмент pm2 для развертывания.
Таким образом, настройка по умолчанию состоит в том, что процесс pm2 запускается, когда nvm не действует, поэтому он использует установку apt-get Node.js (версия 6). Итак, основной демон pm2 начинается с Node.js 6. Если я запускаю приложения в режиме fork, они запускаются в отдельных процессах, и настройки nvm действуют. Когда я запускаю приложения в режиме кластера - они наследуют среду, отличную от nvm.
Я исправил это, перезапустив pm2, когда настройки nvm действуют. Также скрипты запуска должны быть исправлены.
ответил(а) 2016-06-10T14:30:00+03:00 5 лет, 5 месяцев назадУдалите корневую папку node_module из вашего проекта (например: myApp ).
Перейдите в папку myApp , а затем введите команду ниже с терминала
Он установит все модули зависимостей, необходимые для вашего проекта.
Укажите путь к папке restler, которая будет находиться внутри папки node_modules, например: var rest = require ('./node_modules/restler');
Это сработало для меня.
ответил(а) 2017-09-06T08:20:00+03:00 4 года, 2 месяца назадВчера я испытал эту ошибку. Потребовалось некоторое время, чтобы понять, что запись main в package.json указывала на файл, который я переместил. Как только я обновил, что ошибка исчезла, и пакет работал.
Проверьте, правильно ли установлена переменная окружения NODE_PATH и указывает ли она на путь node_modules. nodejs использует эту переменную для поиска библиотек
Я столкнулся с той же проблемой, когда кто-то из команды обновил package.json в SVN. Простое удаление каталога node_modules не помогло. Как я решил проблему:
Надеюсь, это поможет кому-то!
Эта ошибка произошла со мной, во время борьбы с усталостью и легкой болезнью, потому что я набрал node blah вместо npm blah .
Я могу добавить еще одно место для проверки; пакет, который я пытался использовать, был еще одним из моих собственных пакетов, которые я опубликовал для частного репозитория NPM. Я забыл правильно настроить свойство "main" в package.json. Итак, пакет находился в папке node_modules пакета-потребителя, но я получал "не могу найти модуль". Мне потребовалось несколько минут, чтобы понять мою ошибку.: - (
ответил(а) 2017-07-10T08:57:00+03:00 4 года, 4 месяца назадЭта ошибка может возникнуть, если вы используете require модуль с отсутствующим или неправильным полем main в своем пакете. json. Хотя сам модуль установлен, npm/node должен использовать один .js файл в качестве точки входа в ваш модуль. Если поля main не существует, по умолчанию он ищет index.js в папке вашего модуля. Если ваш основной файл модуля не называется index.js, он не сможет require его.
Обнаружен при преобразовании модуля на основе browserify в модуль CommonJS require -able; browserify не интересовался отсутствующим полем main , поэтому ошибка осталась незамеченной.
ответил(а) 2017-06-23T17:30:00+03:00 4 года, 5 месяцев назадУдаление узла /npm, а затем переустановка стабильной (не самой последней) версии работало на меня.
ответил(а) 2019-04-12T18:50:00+03:00 2 года, 7 месяцев назадПожалуйста, установите новый CLI v3 (npm install -g ionic @latest).
Если эта проблема все еще проблема в CLI v3. Спасибо!
Просто нашел необычный сценарий, который может быть полезен кому-то и является своего рода красной селедкой.
Я также получал ошибку Can not Find Module, но, как ни странно, все отлично работало в моей локальной (Mac) среде Node.js. Эта проблема появилась только при развертывании кода на нашем Linux-сервере.
Ну. оказалось, что это опечатка, которая (по-видимому) была установлена на Mac на основе Node.js.
Включение выглядит следующим образом:
Но фактический файл назывался "s3Uploader.class.js"
Обратите внимание на разницу в корпусе "s" и "S" между кодом и именем файла.
Итак - в том случае, что ни одно из других решений здесь не решает вашу проблему, проверьте, чтобы вы не ошиблись в символах вашего включенного имени файла!:)
ответил(а) 2017-05-18T23:17:00+03:00 4 года, 6 месяцев назадОбнаружена эта проблема при использовании webpack с webpack-dev-middleware .
Включил одиночный файл в папку .
Наблюдатель, похоже, не видел новую папку, и модуль теперь отсутствовал.
Исправлено перезапуском процесса.
ответил(а) 2017-04-19T03:22:00+03:00 4 года, 7 месяцев назадЯ пытался опубликовать свой собственный пакет, а затем включить его в другой проект. У меня была эта проблема из-за того, как я построил первый модуль. Я использую экспорт ES2015 для создания модуля, например, скажем, модуль выглядит следующим образом:
После компиляции с Вавилоном и до него было опубликовано:
Итак, после npm install module-name в другом проекте (ни один ES2015) мне пришлось делать
var hello = require('module-name').default;
Фактически полученный пакет импортирован.
Надеюсь, что это поможет!
ответил(а) 2016-04-06T10:53:00+03:00 5 лет, 7 месяцев назадПрежде всего, да, часть моего ответа определенно полезна для решения ошибки, которая публикуется OP. Во-вторых, попробовав следующий шаг, я столкнулся с несколькими другими ошибками, поэтому написал и их решение.
(Psst! Я не уверен, что я успешно помог в решении вышеуказанной ошибки, или если я нарушил какое-то правило или формат ответа, но я столкнулся с вышеуказанной ошибкой и некоторыми другими, и это потребовало много времени для того, чтобы найти правильные решения для этих ошибок. Я пишу полное решение, потому что, если кто-то еще столкнется с этими ошибками, то он, надеюсь, получит решение здесь.)
Итак, добавляя и разрабатывая ответ PrashanthiDevi, а также добавляя мой личный опыт, вот он:
Я новичок во всей части тестирования e2e и unit. Я начал изучать эту часть из Protractor. Теперь у меня уже были файлы, в которых были написаны тесты, но мне пришлось запускать тесты.
Я уже установил все необходимые программные средства и инструменты, но когда я изначально запускал код для запуска тестов, gulp itest , я получил этот "Не могу найти модуль" Error. Пройдя много разных вопросов по SO, я нашел один ответ, который, как я думал, может помочь найти решение.
Человек предложил запустить команду npm install в моей папке проекта.
Для этого причина заключалась в обновлении папки node -modules внутри нашей папки проекта со всеми необходимыми и необходимыми файлами и зависимостями. p >
(Нижняя часть может быть неактуальна с этим вопросом, но может быть полезна, если кто-то столкнется с той же ситуацией, с которой я столкнулся.)
Вышеуказанный шаг, конечно, решил мою предыдущую ошибку, но бросил новую! На этот раз ошибка Could not find chromedriver at '..\node_modules\protractor\selenium\chromedriver' .
Однако решение этой ошибки было для меня довольно глупым (и смешным). У меня уже был файл хромированной записи в папке selenium. Но оказывается, что ошибка выше, потому что мои файлы хромированных рекордов находились внутри селеновой папки и не внутри chromedriver папка. Итак, создав папку хромированная рекордер и скопировав файлы хромированных файлов, я решил свою проблему!
Немного обо всем и все о немногом, или практический опыт системного администратора.
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
---|---|---|---|---|---|---|
« Ноя | Янв » | |||||
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Лекция №19 - Модули Linux
Модули являются очень важной частью операционной системы Linux. Модули расширяют функциональность ядра Linux. Модули представляют из себя специальные файлы, в которых реализован тот или иной функционал. Драйверы устройств - это тоже тип модулей. Модули могут быть независимыми - самодостаточными для выполнения заложенных в них функций, а могут быть зависимыми от других модулей.
Расположены модули в каталоге /lib/modules/версия ядра. Если у вас установлено несколько версий ядра, то, как правило, в каталоге /lib/modules/ будет находится такое же количество каталогов. Например:
/linux$ ls -1 /lib/modules/
2.6.31-14-generic
2.6.31-15-generic
2.6.31-16-generic
Модули очень тесно взаимодействуют с ядром поэтому для каждой ревизии ядра генерируется свой подкаталог с модулями. В загрузочных скриптах с помощью команды uname -r вычисляется версия ядра и модули загружаются из каталога с соответствующим названием.
Для того чтобы просмотреть список загруженных модулей предназначена команда lsmod. Команда выводит информацию в трех столбцах: имя модуля, размер модуля и зависимые модули. в третьем столбце указаны модули работа которых зависит от модуля, который указан в первом столбце.
Module Size Used by
nfs_acl 2844 0
sunrpc 191712 1 nfs_acl
qnx4 8576 0
В примере видим, что работа модуля nfs_acl зависит от модуля sunrpc.
Чтобы загрузить модуль в оперативную память (и ядро могло использовать его функции) можно использовать команду insmod. Выполняется команда от имени суперпользователя и в качестве параметра нужно указать название файла модуля с указанием полного пути к файлу:
/linux$ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/qnx4/qnx4.ko
Загружаемый модуль отвечает за возможность взаимодействия ядра с файловой системой qnx. Проверим загружен ли модуль:
/linux$ lsmod | grep qnx
qnx4 8576 0
Чтобы выгрузить модуль из памяти предназначена команда rmmod. В качестве параметра команда rmmod принимает имя модуля в том виде в котором выдает его команда lsmod. При указании имени модуля можно пользоваться клавишей TAB для дополнения имени по первым буквам.
/linux$ sudo rmmod qnx4
igor@ubuntu:
/linux$ lsmod | grep qnx
Если попытаться выгрузить модуль от работы которого зависят другие модули получим предупреждение о том, какие модули используют выгружаемый модуль, и модуль не будет выгружен:
/linux$ sudo rmmod sunrpc
ERROR: Module sunrpc is in use by nfs_acl
Команда insmod является очень простой командой и не совсем удобной для пользователя, поэтому чаще всего используется более продвинутая команда modprobe. Чтобы с помощью команды modprobe загрузить модуль необходимо передать ей имя модуля. Например:
/linux$ sudo modprobe qnx4
igor@ubuntu:
/linux$ lsmod | grep qnx
qnx4 8576 0
Основное преимущество команды modprobe в том, что она в отличии от insmod умеет разбирать зависимости модулей. В начале я уже говорил, что модули могут зависеть от других модулей и если вы попытаетесь командой insmod загрузить модуль который зависит от другого модуля (и он не загружен), то получите ошибку. Например:
Команда modprobe может воспользоваться файлом /lib/modules/версия ядра/modules.dep в котором описаны все зависимости модулей. Если открыть этот файл и найти строку для модуля nfs_acl.ko, то можно увидеть, что он зависит от модуля sunrpc.ko. Командой insmod в данном случае пришлось бы воспользоваться дважды: сначала для загрузки модуля sunrpc.ko, а затем уже для модуля nfs_acl.ko:
/linux$ sudo insmod /lib/modules/2.6.31-16-generic/kernel/net/sunrpc/sunrpc.ko
igor@ubuntu:
/linux$ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
Команда modprobe сама разбирает зависимости и загружает необходимые модули:
/linux$ sudo modprobe nfs_acl
igor@ubuntu:
/linux$ lsmod
Module Size Used by
nfs_acl 2844 0
sunrpc 191712 1 nfs_acl
Файл /lib/modules/версия ядра/modules.dep генерируется и обновляется командой depmod. Команда depmod просматривает информацию о каждом модуле и генерирует зависимости, которые записываются в файл /lib/modules/версия ядра/modules.dep.
Еще одна полезная команда при работе с модулями это команда modinfo. modinfo - считывает информацию о модуле и выдает ее на экран:
/linux$ modinfo nfs_acl
filename: /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
license: GPL
srcversion: F7BFA9B63618825ED524789
depends: sunrpc
vermagic: 2.6.31-16-generic SMP mod_unload modversions 586
Среди прочей видим информацию об имени файла модуля (строка filename), и зависимостях (строка depends).
Важный момент для понимания работы моделей состоит в том, что модуль во время своей загрузки может принимать параметры, которые могут влиять на его работу. Тема эта непростая и мы не будем рассматривать ее на этой лекции, но знать об этом нужно. Какие параметры может принимать модуль можно посмотреть командой modinfo. Не все модули могут принимать параметры (например у нашего модуля nfs_acl таких параметров нет), а вот в примере ниже показан модуль которому можно передавать параметры:
Доброго всем дня.
Люди помогите разобраться. Какой бы пакет nginx из .src.rpm я не собирал, и какой бы версии(пробывал разные), всегда получаю одну и туже ошибку при сборке:
Ошибки сборки пакетов:
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-0.8.54-1.fc13.i386/usr/share/man/man3/nginx.3pm.gz
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-0.8.54-1.fc13.i386/usr/lib/perl5/nginx.pm
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-0.8.54-1.fc13.i386/usr/lib/perl5/auto/nginx/nginx.so
Пробывал и сборки как родные от fedora, так и от CentOS, эффект одинаков. Подскажите, кто знает, в чем проблема.
Пытаюсь собрать на fedora 13. Но пробывал и на другой Fedora 12, та же ошибка сборки тоже разных .src.rpm пакетов.
> неGentoo
что зачем? Собирать зачем? Хочу обновить до версии 1.0.4. к примеру
Собираете через mock? Если не сложно, покажите полный лог процесса сборки.
Давайте покажу концовку, если не поможет куда-то выложу полностью
провожу сборку командой rpmbuild -bb nginx.spec
Ошибки сборки пакетов:
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-1.0.4-1.fc13.i386/usr/share/man/man3/nginx.3pm.gz
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-1.0.4-1.fc13.i386/usr/lib/perl5/auto/nginx
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-1.0.4-1.fc13.i386/usr/lib/perl5/nginx.pm
Файл не найден: /root/rpmbuild/BUILDROOT/nginx-1.0.4-1.fc13.i386/usr/lib/perl5/auto/nginx/nginx.so
Целиком, наверно, лог не надо, почитайте его сами. Вобще, в Федоре настоятельно советуют не собирать пакеты от root, может проблема в этом.
Все четыре отсутсвтующих файла связаны с модулем perl'а. Вы не отключали компиляцию этого модуля и perl есть в системе? В spec-файле они описаны так:
И странно, что perl_vendorarch у вас просто /usr/lib/perl5/.Можете попробовать собрать без упаковки в пакет (rpmbuild -bi) и посмотреть (через find) в результирующем каталоге наличие этих файлов, пусть и с другим путём.
Читайте также: