Если вы хотите, чтобы Vue использовал библиотеку, которая уже загружена в объект окна, укажите ее в vue.config.js
:
module.exports = {
chainWebpack: config => {
config.externals({
swiper: 'Swiper'
})
}
}
Теперь везде, где вы используете import Swiper from 'swiper'
(или import * as Swiper from 'swiper'
- в зависимости от вашего tsconfig и от того, как экспортируется используемая вами библиотека) вы на самом деле получаете то, что в данный момент window.Swiper
, независимо от того, какой импорт создается, например (может быть приложением или может быть во время загрузки отложенного загруженного компонента). ).
Что касается авторитетных источников go, я считаю, что высшими авторитетами по этому вопросу являются:
внешние данные
Запретить связывание определенных импортированных пакетов и вместо этого получить эти внешние зависимости во время выполнения.
Также обратите внимание, что вы должны импортировать модуль в public/index.html
, используя <script>
(указывая, куда вы загружаете эту библиотеку из производства), если вы хотите, чтобы ваш serve
работал, как вы сказали веб-пакету, что он найдет эту зависимость в объекте окна. В противном случае ваш build
будет работать нормально (при условии, что window.Swiper
существует в производстве), но serve
не будет.
Использование внешних ссылок с машинописью:
Обратите внимание, что вам все равно понадобится @types/${moduleName}
в devDependencies
, если вы хотите, чтобы ${moduleName}
было напечатано в вашем приложении, если существует @types/${moduleName}
.
Если этого не произойдет, вы можете импортировать типы из пакета (в devDependecies
, только для типов, он не будет включен в комплект). Если ни одна из этих опций не подходит для вашего конкретного пакета, вы, вероятно, захотите объявить фиктивный модуль в вашем shims-vue.d.ts
:
declare module '${moduleName}';
..., который фактически отключит проверку набора текста для этого модуля. Обратите внимание, что объявление макета может иметь пагубные последствия, поскольку оно переопределит любые существующие типы для этого модуля. Поэтому используйте его только тогда, когда ничего не работает.
Очевидно, в вашем случае ${moduleName}
равно swagger
.