Ошибка автозапуска службы nfs-server.service — exportfs: Failed to resolve в CentOS Linux 7.2
При перезагрузке файлового NFS-сервера на базе CentOS Linux 7.2 служба nfs-server не стартует, хотя настроена на автоматический запуск. Соответсвенно NFS-клиентам недоступны NFS-шары с этого файлового срвера.
При этом ручной запуск службы nfs-server происходит успешно.
После перезагрузки сервера, если заглянуть в текущий статус службы то увидим то, что она не запущена и ошибку типа «exportfs: Failed to resolve…»
# service nfs-server status Redirecting to /bin/systemctl status nfs-server.service ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service;enabled;vendor preset:disabled) Active: failed (Result: exit-code) since Fri 2016-09-09 10:03:12 MSK; 28min ago Process: 1955 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE) Sep 09 10:02:35 systemd: Starting NFS server and services... Sep 09 10:03:12 exportfs: exportfs: Failed to resolve OVIRT1.dom.com Sep 09 10:03:12 systemd: nfs-server.service:control process exited, code=exited status=1 Sep 09 10:03:12 systemd: Failed to start NFS server and services. Sep 09 10:03:12 systemd: Unit nfs-server.service entered failed state. Sep 09 10:03:12 systemd: nfs-server.service failed.
Проблема может быть связана с тем, что в процессе загрузки служба nfs-server.service пытается запуститься до того, как закончена полная инициализация сети, и соответственно из-за ошибки разрешения имени из файла /etc/exports служба не стартует.
Для решения этой проблемы можно использовать разные методы.
Метод №1
Включить службу NetworkManager-wait-online, в случае если в вашей системе используется NetworkManager :
# systemctl enable NetworkManager-wait-online.service
Метод №2
Отредактировать конфигурационный файл службы /usr/lib/systemd/system/nfs-server.service, добавив в секцию строки:
Unit ... After=network-online.target Wants=network-online.target Requires=network-online.target ...
После этого выполняем команду:
# systemctl daemon-reload
Эти методы можно пробовать использовать как раздельно так и вместе.
После применения методов несколько раз перезагружаем сервер и убеждаемся в том, что каждый раз служба nfs-server запускается автоматически при загрузке системы.
Если ничего не помогает, то можно попробовать поставить жёсткий «костыль», а именно добавить в конец файла /etc/rc.d/rc.local проверку наличия сети путём отсылки ping, и как только сеть появится — запускать службу.
Этот фрагмент добавим в файл /etc/rc.d/rc.local (в переменную checkip вставьте IP другого сервера, например шлюза):
sleep 10 checkip="10.1.0.1" if ; then while ! ping -c 1 -W 1 $checkip; do # Waiting for gateway ip - network interface might be down..." sleep 1 done sleep 10 systemctl start nfs-server.service fi
И не забудем сделать исполняемым файл
# chmod +x /etc/rc.d/rc.local
Монтирование с записью в fstab
Для большего удобства можно добавить запись с сетевой папкой в fstab. Целесообразно создать точку монтирования сетевой папки в /media, потому что каталоги, созданные там, будут отображаться в Nautilus в левой колонке, монтировать их можно будет одним кликом.
sudo mkdir mediaОбщедоступные
В файл /etc/fstab добавляем подобную запись:
192.168.1.1:/data /media/Общедоступные nfs user,rw,noauto 0 0
опция «noauto» запрещает автоматическое монтирование сетевого диска при старте системы.
Использование на ноутбуке
При монтировании удаленных папок NFS посредством fstab, в ситуации, когда сеть с сервером будет не доступна, ноутбук невозможно выключить или отправить в спящий режим. Для использования удаленных папок NFS на ноутбуке лучше воспользоваться монтированием при помощи
1. Export NFS Share to single host
To export to single client using NFS, I will add below to :
# cat /etc/exports /dump/backups 10.43.138.2
To refresh the share
# exportfs -r exportfs: No options for /dump/backups 10.43.138.2: suggest 10.43.138.2(sync) to avoid warning
Since we have not provided any OPTIONS to the NFS share we get this warning. It will work but it is recommended to add atleast «» in the section to avoid this warning
So I have updated my
/dump/backups 10.43.138.2(sync)
Net refresh the share
Advertisement
# exportfs -r
Now we don’t get any warning, verify the existing share
# exportfs -v /dump/backups 10.43.138.2(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
Импорт *
Обычно мы располагаем список того, что хотим импортировать, в фигурных скобках , например вот так:
Но если импортировать нужно много чего, мы можем импортировать всё сразу в виде объекта, используя . Например:
На первый взгляд «импортировать всё» выглядит очень удобно, не надо писать лишнего, зачем нам вообще может понадобиться явно перечислять список того, что нужно импортировать?
Для этого есть несколько причин.
-
Современные инструменты сборки (webpack и другие) собирают модули вместе и оптимизируют их, ускоряя загрузку и удаляя неиспользуемый код.
Предположим, мы добавили в наш проект стороннюю библиотеку с множеством функций:
Теперь, если из этой библиотеки в проекте мы используем только одну функцию:
…Тогда оптимизатор увидит, что другие функции не используются, и удалит остальные из собранного кода, тем самым делая код меньше. Это называется «tree-shaking».
-
Явно перечисляя то, что хотим импортировать, мы получаем более короткие имена функций: вместо .
-
Явное перечисление импортов делает код более понятным, позволяет увидеть, что именно и где используется. Это упрощает поддержку и рефакторинг кода.
6. How to use wildcard with NFS exports
Machine names may contain the wildcard characters and , or may contain character class lists within . This can be used to make the exports file more compact
6.1 Using ? with hostnames
We can use wildcard to match a single character in the hostname, for example to match , , , we can use:
/dump/backups server?(sync)
If you wish to match for more than one character then you can use more than one times. For example to match , , , we can use:
/dump/backups server??(sync)
6.2 Using square brackets with hostnames
You can use square brackets to define a range of numbers or characters. Below example will match all machines with hostname between to
/dump/backups server.example.com(sync)
To map to we can use
/dump/backups server(sync)
To map character with square brackets for example match till , in such case use:
/dump/backups server(sync)
6.3 Using * with hostnames
As you can assume, means match everything. So assuming you have multiple subdomains under example.com then you can simply use to match for all the sub-domains
/dump/backups *.example.com(sync)
So this will match
mail.example.com cdn.example.com host.example.com
But this will not match
ab.cd.example.com
So to match this you must use:
/dump/backups *.*.example.com(sync)
So I hope you got the idea.
Автоматическое монтирование файловых систем NFS с /etc/fstab
Как правило, вы хотите монтировать удаленный каталог NFS автоматически при загрузке системы.
Файл содержит список записей , которые определяют , где , как и то , что файловая система будет смонтирована на старте системы.
Чтобы автоматически смонтировать общий ресурс NFS при запуске вашей системы Linux, добавьте строку в файл. Строка должна содержать имя хоста или IP-адрес сервера NFS, экспортируемый каталог и точку монтирования на локальном компьютере.
Используйте следующую процедуру для автоматического монтирования общего ресурса NFS в системах Linux:
-
Установите точку монтирования для удаленного общего ресурса NFS:
-
Откройте файл в текстовом редакторе :
Добавьте следующую строку в файл:
/etc/fstab
Где IP-адрес сервера NFS, это экспортированный каталог и локальная точка монтирования.
-
Запустите команду в одной из следующих форм для подключения общего ресурса NFS:
Команда, будет читать содержание и установить долю.
В следующий раз, когда вы перезагрузите систему, общий ресурс NFS будет смонтирован автоматически.
5. Restrict a NFS share for specified hosts
We can restrict a share in itself by providing only those list of hosts who should be allowed to access the share. But sometimes when you have provided an entire network in the allow list of for example
/dump/backups 10.43.138.0/255.255.255.224(sync)
But you only wish to restrict the share to host. In such case this can be tricky.
With NFSv3 we can use hosts.deny to restrict access to such hosts by using to define an access rule but the same is not possible with .
To restrict a host with NFSv3 we will add below entry for
# echo "rpcbind: 10.43.138.2" >> /etc/hosts.deny
Now if you try to access the NFS share using this hosts:
# mount -o nfsvers=3 10.43.138.1:/dump/backups /mnt mount.nfs: access denied by server while mounting 10.43.138.1:/dump/backups
But if I try to access the same share using NFSv4
# mount -o nfsvers=4 10.43.138.1:/dump/backups /mnt
It works. So hosts.deny was unable to block this request.
To overcome this you may rely on firewall to block the respective host from accessing your NFS server
5.1 Restrict NFS shares using iptables
# iptables -I INPUT -s 10.43.138.2 -p tcp --dport nfs -j DROP # iptables -I INPUT -s 10.43.138.2 -p udp --dport nfs -j DROP
iptables rule to restrict NFS
5.2 Restrict NFS shares using firewalld rich rules
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.10.10.4' service name='nfs' reject" # firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.10.10.4' service name='mountd' reject" # firewall-cmd --reload
List firewalld rule
However with wildcards we can have more control over the hosts we wish to allow the access for NFS share which we will learn next.
3: Настройка экспорта NFS на хосте
Каталоги полностью готовы, теперь нужно открыть конфигурационный каталог NFS и расшарить их.
Файл содержит ряд комментариев, объясняющих функции и общую структуру каждой строки. Базовый синтаксис файла имеет такой вид:
Добавьте настройки для каждого каталога, который нужно расшарить.
Примечание: Замените условный IP 203.0.113.24 IP-адресом своего клиента.
Параметры обоих каталогов почти одинаковы, за исключением no_root_squash, который присутствует только в настройках домашнего каталога.
Рассмотрим параметры подробнее:
- rw: устанавливает права клиента на чтение и изменение каталога.
- sync: синхронизирует каталоги по NFS, что обеспечивает надёжное и согласованное окружение (с другой стороны, это может замедлить скорость выполнения операций).
- no_subtree_check: предотвращает проверку поддерева (процесс проверки хост-сервером доступности файла в экспортируемом дереве для каждого запроса). Это может вызвать много проблем в совместном использовании, например, если открытый на клиенте файл был переименован на сервере. Проверку поддерева рекомендуется отключить в большинстве случаев.
- no_root_squash: по умолчанию NFS транслирует запросы от root-пользователя клиента не-root пользователю сервера, благодаря чему root-пользователь клиента не может использовать файловую систему хоста с теми же привилегиями. Данная директива блокирует эту функцию безопасности для некоторых совместно используемых ресурсов.
Внеся все изменения, сохраните и закройте файл.
Перезапустите NFS, чтобы клиенты получили доступ к расшаренному каталогу.
Теперь нужно убедиться, что трафик к расшаренным каталогам не блокируется брандмауэром.
Шаг 6 — Тестирование доступа NFS
Теперь мы протестируем доступ к общим ресурсам, для чего выполним запись в каждый из них.
Пример 1: общий ресурс общего назначения
Запишем тестовый файл в общий ресурс :
Проверим его права владения:
Поскольку мы монтировали этот том без изменения поведения NFS по умолчанию и создали файл от имени пользователя root клиентской системы с помощью команды , владельцем файла по умолчанию является . Суперпользователи клиента не смогут выполнять на этом смонтированном общем ресурсе NFS административные действия, такие как изменение владельца файла или создание нового каталога для группы пользователей.
4. Export NFS share to multiple hosts
To export a share to multiple hosts across different network range you must create individual entry of respective hosts.
# cat /etc/exports /dump/backups 10.43.138.0/255.255.255.224(sync) /dump/backups 192.168.0.1/255.255.255.0(sync) /dump/backups 192.168.100.10(sync) /dump/backups 10.10.10.0/24(sync)
In this example I am exporting the same path to multiple hosts across different networks.
You can also add them in single line but to make the file content look clean I am using different entries for the same share. To add all these in the single line, the syntax would be:
Advertisement
/PATH/TO/DIR HOST1() HOST2() HOST3()
To use single line share for our last example, we can use:
/dump/backups 10.43.138.0/255.255.255.224(sync) 192.168.0.1/255.255.255.0(sync) 192.168.100.10(sync) 10.10.10.0/24(sync)
Настройка клиентов NFS
Теперь, когда сервер NFS настроен и общие ресурсы экспортированы, на следующем шаге настройте клиенты и подключите удаленные файловые системы.
Вы также можете смонтировать общий ресурс NFS на компьютерах MacOS и Windows, но мы сосредоточимся на системах Linux.
Установка клиента NFS
На клиентских компьютерах установите инструменты, необходимые для монтирования удаленных файловых систем NFS.
- Установите клиент NFS в Debian и Ubuntu. Название пакета, включающего программы для монтирования файловых систем NFS в дистрибутивах на основе Debian, – nfs-common. Чтобы установить его, запустите:
sudo apt update sudo apt install nfs-common
- Установите клиент NFS в CentOS и Fedora. На Red Hat и ее производных установите пакет nfs-utils:
sudo yum install nfs-utils
Монтирование файловых систем
Мы будем работать на клиентском компьютере с IP-адресом 192.168.26.110, который имеет доступ для чтения и записи к /srv/nfs4/www и доступ только для чтения к каталогу /srv/nfs4/backups в файловой системе.
Создайте две новые директории для точек монтирования. Вы можете создавать эти каталоги в любом месте, которое вы хотите.
sudo mkdir -p /backups sudo mkdir -p /srv/www
Смонтируйте экспортированные файловые системы с помощью команды mount:
sudo mount -t nfs -o vers=4 192.168.26.148:/backups /backups sudo mount -t nfs -o vers=4 192.168.26.148:/www /srv/www
Где 192.168.26.148 находится IP-адрес сервера NFS. Вы также можете использовать имя хоста вместо IP-адреса, но оно должно быть разрешено клиентским компьютером. Обычно это делается путем сопоставления имени хоста с IP в файле /etc/hosts.
При монтировании файловой системы NFSv4 вам нужно пропустить корневой каталог NFS, поэтому вместо /srv/nfs4/backups нужно использовать /backups.
Убедитесь, что удаленные файловые системы успешно смонтированы, используя команду mount или df:
df -h
Команда напечатает все смонтированные файловые системы. Последние две строки являются смонтированными долями:
... 192.168.26.148:/backups 9.7G 1.2G 8.5G 13% /backups 192.168.26.148:/www 9.7G 1.2G 8.5G 13% /srv/www
Чтобы сделать монтирование постоянным при перезагрузке, откройте файл /etc/fstab:
sudo nano /etc/fstab
и добавьте следующие строки:
192.168.26.148:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0 192.168.26.148:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
Чтобы узнать больше информации о доступных опциях при монтировании файловой системы NFS, введите man nfs в свой терминал.
Другой вариант для монтирования удаленных файловых систем – использовать инструмент autofs или создать системный модуль.
Тестирование NFS Access
Давайте проверим доступ к общим ресурсам, создав новый файл в каждом из них.
Сначала попробуйте создать тестовый файл в каталоге /backups с помощью команды touch:
sudo touch /backups/test.txt
Файловая система /backup экспортируется как только для чтения, и, как ожидается, вы увидите сообщение об ошибке Permission denied:
touch: cannot touch ‘/backups/test’: Permission denied
Далее попробуйте создать тестовый файл в каталоге /srv/www как root, используя команду sudo:
sudo touch /srv/www/test.txt
Опять вы увидите сообщение Permission denied.
touch: cannot touch ‘/srv/www’: Permission denied
Каталог /var/www принадлежат к пользователю apache, и имеет root_squash, который отображает привилегированный пользователь к пользователю nobody и группе nogroup, которая не имеет права на запись на удаленный ресурс.
Предполагая, что пользователь apache существует на клиентском компьютере с тем же UIDи GID на удаленном сервере (что должно быть в случае, если, например, вы установили apache на обоих компьютерах), вы можете протестировать создание файла как пользователя apache:
sudo -u apache touch /srv/www/test.txt
Команда не будет отображать вывод, что означает, что файл был успешно создан.
Для проверки перечислите файлы в каталоге /srv/www:
ls -la /srv/www
Выходные данные должны показать вновь созданный файл:
drwxr-xr-x 3 apache apache 4096 Oct 14 05:24 . drwxr-xr-x 3 root root 4096 Oct 23 05:25 .. -rw-r--r-- 1 apache apache 0 Oct 23 04:22 index.html -rw-r--r-- 1 apache apache 0 Oct 14 05:24 test.txt
Размонтирование файловой системы NFS
Если вам больше не нужен удаленный общий ресурс NFS, вы можете размонтировать его, как любую другую смонтированную файловую систему, с помощью команды umount. Например, чтобы размонтировать ресурс /backup, который вы запустите:
sudo umount /backups
Если точка монтирования определена в файле /etc/fstab, убедитесь, что вы удалили строку или закомментировали ее, добавив # в начале строки.
13 ответов
47
Exportfs
Когда вы создаете файл на сервере, вы должны убедиться, что его экспортируете. Обычно вы хотите запустить эту команду:
Это экспортирует все записи в файле экспорта.
showmount
Другое, что я часто делаю, это с других компьютеров, я проверю любую машину, которая экспортирует общие ресурсы NFS в сеть, используя команду .
Fstab
Чтобы смонтировать их при загрузке, вы должны добавить эту строку к своим клиентским машинам, которые хотят потреблять монстры NFS.
автомонтирование
Если вы собираетесь перезагружать эти серверы, я настоятельно рекомендую вам изучить настройку автомонтирования () вместо добавления этих записей в , Это немного больше работы, но стоит того.
Это позволит вам перезагружать серверы более независимо друг от друга, а также будет создавать только монтирование NFS, когда оно действительно необходимо и /или будет использоваться. Когда он будет работать, он будет отключен.
Ссылки
18.2. Конфигурация клиента NFS — Руководство по развертыванию CentOS 5
28
Я видел ту же ошибку (), и проблема была исправлена с помощью опции следующим образом:
- Сервер Ubuntu 14.04 64bit LTS.
- Клиент — CentOS 6.5 64bit.
5
В моем случае работает с помощью nfs4:
В файле на сервере
создает корневой каталог при монтировании общего ресурса.
, потому что у меня есть еще несколько дисков в экспортируемой файловой системе, к которой я хочу получить доступ.
, потому что я хочу получить доступ как пользователь root (su) с клиентской стороны. Я уверен, что я единственный, кто может это сделать в моей локальной сети.
Сервер и клиенты — Ubuntu 14.04 64bit.
Если вы хотите использовать nfs3, ответ @ fumisky-wells также работает для меня.
2
необходимо отредактировать на компьютере NFS server , а не на клиентах, как вы заявили, что вы это сделали, поскольку он проверяется сервером NFS, когда клиент запрашивает доступ к общей папке.
Если вы поместите следующее в на сервере NFS, оно должно работать:
2
Если nfs-клиент пытается установить экспортированный общий ресурс внутри контейнера linux, контейнер должен работать в привилегированном режиме.
В случае докера,
2
Я получал такое же сообщение об ошибке, и моя проблема оказалась из-за клиентской машины, имеющей два сетевых интерфейса, подключенных к одной локальной сети. Сервер был настроен так, чтобы ожидать, что на втором интерфейсе будет IP-адрес dhcp. Поэтому я просто настроил второй интерфейс на наличие статического IP-адреса, а также добавил второй статический IP-адрес в конфигурацию сервера.
2
Для меня проблема заключалась в том, что я использовал IP-адрес сервера в вместо клиента .
Дело в том, что вы должны поместить все ips, которым вы предоставляете доступ, на сервер
Для меня проблема заключалась в том, что мой маршрутизатор изменил использованный IP-адрес клиента, так что запись в на серверном компьютере разрешала доступ только для IP-адреса, который больше не использовался.
То же самое может произойти, если вы попытаетесь установить общий ресурс NFS в экземпляре Virtual Box с сетевым адаптером, настроенным как .
Выбор в настройках сети виртуальной машины устраняет эту проблему.
Я знаю, что это старый поток, но моя проблема связана с LXC и AppArmor .
Убийство AppArmor или добавление профиля исключения, исправлено.
Эта ошибка также может быть вызвана попыткой установить зашифрованный путь. (Например, в вашем домашнем каталоге, если вы решили его зашифровать)
Единственное решение, которое работало для меня, заключалось в том, чтобы экспортировать файловые системы, начиная с . Похоже, это ограничение (или, по крайней мере, по умолчанию) NFSv4.
Поскольку я пытался экспортировать USB-накопитель, который автомонтируется в , мне нужен был способ, чтобы он был установлен в . Для этого:
И в :
Когда я экспортировал напрямую, попытка монтировать на клиенте всегда приводила к .
Решение работало, но я не хотел форсировать v3.
Следует отметить, что связанная страница, которая привела меня сюда, наш правильный ответ заключалась в том, что вы не можете использовать * подстановочный знак в IP-адресе в экспорте. Это либо * (все IP-адреса), либо используется как подстановочный знак в именах доменов IE: * .domain.com.
Например: это правильно
Это не сработает (или, по крайней мере, неверно), но работало для меня в течение многих лет, пока я не попытался установить экспорт из виртуальной машины Fedora.
Настройка параметров
Существует файл конфигурации: /etc/exports в котором прописываются файловые системы (директории) которые необходимо разрешить монтировать удаленно по протоколу NFS. Каждая строка в нем — указание на экспортируемую файловую систему и доступ к ней. Шаблон записи таков:
Пример:
/home/share 192.168.0.6(rw,no_root_squash)
Директорию в данном примере разрешено примонтировать на хост 192.168.0.6 в режиме write-read.
Чтобы запись в файле начала работать выполним:
# exportfs -r
Узнаем список экспорта файловых систем:
# exportfs
(exportfs — программа для работы с NFS на основе файла exports)
/home/share 192.168.0.6
4: Настройка брандмауэра на хосте
Проверьте состояние брандмауэра:
В данной системе поддерживается только трафик SSH. Добавьте NFS в список правил.
Многие приложения есть в списке брандмауэра ufw. Их можно добавить в настройки, просто указав имя. К сожалению, nfs не входит в этот список. Брандмауэр ufw читает файл /etc/services, чтобы найти порт и протокол приложения. В этот файл можно добавить NFS.
Примечание: Правила брандмауэра должны блокировать весь ненужный трафик, разрешая только необходимые соединения.
Чтобы открыть порт 2049 на сервере host, введите на хосте эту команду, указав IP клиента:
Проверьте изменения:
В списке появится новый порт.
UFW поддерживает трафик клиента NFS по порту 2049.
Discussion
Exporting Directories
- The first synopsis shows how to invoke exportfs when adding new entries to the export table. When using exportfs -a, all exports listed in
/etc/exports are added to /var/lib/nfs/etab. The kernel’s export table is also updated as needed.
The host:/path argument specifies a local directory to export, along with the client or clients who are permitted to access it. See exports(5)
for a description of supported options and access list formats. To export a directory to the world, simply specify :/path.
The export options for a particular host/directory pair derive from several sources. The default export options are sync,ro,root_squash,wdelay. These
can be overridden by entries in /etc/exports.
A system administrator may override options from these sources using the -o command-line option on exportfs. This option takes a
comma-separated list of options in the same fashion as one would specify them in /etc/exports. In this way exportfs can be used to modify the
export options of an already exported directory.
Unexporting Directories
- The third synopsis shows how to unexported a currently exported directory. When using exportfs -ua, all entries listed in /var/lib/nfs/etab
are removed from the kernel export tables, and the file is cleared. This effectively shuts down all NFS activity.
To remove an export, specify a host:/path pair. This deletes the specified entry from /var/lib/nfs/etab and removes the corresponding kernel
entry (if any).
Dumping the Export Table
- Invoking exportfs without options shows the current list of exported file systems. Adding the -v option causes exportfs to display the
export options for each export.
Шаг 8 — Демонтирование удаленного общего ресурса NFS
Если вы больше не хотите использовать удаленный каталог в своей системе, вы можете демонтировать его, переместив его из структуры общих каталогов:
Обратите внимание, что команда называется , а не , как можно было бы ожидать. При этом удаляются общие удаленные ресурсы и доступным остается только локальное хранилище:
При этом удаляются общие удаленные ресурсы и доступным остается только локальное хранилище:
Если вы также хотите помешать их повторному монтированию при следующей перезагрузке, измените и удалите строку или закомментируете ее, поместив символ в начало строки. Также вы можете отключить автоматическое монтирование, удалив опцию . При этом у вас сохранится возможность монтирования вручную.
Итого
Вот все варианты , которые мы разобрали в этой и предыдущей главах.
Вы можете проверить себя, читая их и вспоминая, что они означают:
- Перед объявлением класса/функции/…:
- Отдельный экспорт:
- Реэкспорт:
- (не реэкспортирует ).
- (реэкспортирует только ).
Импорт:
- Именованные экспорты из модуля:
- Импорт по умолчанию:
- Всё сразу:
- Только подключить модуль (его код запустится), но не присваивать его переменной:
Мы можем поставить в начало или в конец скрипта, это не имеет значения.
То есть, технически, такая запись вполне корректна:
На практике импорты, чаще всего, располагаются в начале файла. Но это только для большего удобства.
Обратите внимание, что инструкции import/export не работают внутри. Условный импорт, такой как ниже, работать не будет:
Условный импорт, такой как ниже, работать не будет:
…Но что, если нам в самом деле нужно импортировать что-либо в зависимости от условий? Или в определённое время? Например, загрузить модуль, только когда он станет нужен?
Мы рассмотрим динамические импорты в следующей главе.