Как опубликовать библиотеку Vue.компоненты js?
Я работаю над проектом, содержащим модуль Vuex и абстрактные компоненты, из которых пользователи могут расширяться.
Я хотел бы опубликовать это на NPM, чтобы очистить мою кодовую базу и вытащить ее из моего проекта как твердый хорошо протестированный модуль. Я указал основной файл package.json
загрузить индекс, который импортирует все, что я хочу разоблачить:
https://github.com/stephan-v/vue-search-filters/
индекс содержит на момент:
import AbstractFilter from './src/components/filters/abstract/AbstractFilter.vue';
import Search from './src/store/modules/search';
module.exports = {
AbstractFilter,
Search
};
для этого мне нужно транспилировать это, так как компилятор babel обычно не будет транспилировать файлы, импортированные из node_modules (исправьте меня, если я ошибаюсь здесь). Кроме того, я, вероятно, был бы хорошей идеей сделать это, чтобы его можно было использовать в разных системах.
как транспилировать только файлы, которые мне нужны, хотя с Webpack? Нужно ли для этого создавать отдельную конфигурацию?
как выглядит такая конфигурация? Я знаю, что у vue-cli есть а build
команда для одного компонента файла, но это немного отличается.
любые советы или предложения о том, как транспилировать что-то подобное, приветствуются.
редактировать
это кажется хорошим началом:
https://github.com/Akryum/vue-share-components
самое важное для пользователей Webpack - это то, что вам нужно транспилировать файлы в UMD, которые можно установить by:
libraryTarget: 'umd'
это будет убедитесь, что ваш transpiling для Universal Module Definition
, что означает, что ваш код будет работать в разных средах,таких как AMD, CommonJS, как простой тег скрипта и т. д.
кроме того, что это импорт, чтобы предоставить свойство externals в webpack:
externals: {}
здесь вы можете определить, какие библиотеки ваших пользователей проекта, но не должны быть встроены в ваш . Например, вы не хотите, чтобы библиотека Vue компилировалась / транспилировалась в источник ваш пакет NPM.
Я буду исследовать немного больше, до сих пор лучшие варианты выглядят как создать пользовательский проект сам, если я хочу гибкость и модульное тестирование.
Webpack документы
это также полезная страница, которая подробно рассказывает о том, как опубликовать что-то с помощью Webpack:
https://webpack.js.org/guides/author-libraries/#add-librarytarget
2 ответов
лучший способ, вероятно, будет построить модуль и установить main
в своем package.json
до my_dist/my_index.js
. В противном случае каждый проект, который будет использовать ваш модуль, должен будет добавить его в include
что довольно утомительно.
вы также хотите, чтобы ваша сборка webpack следовала UMD (универсальное определение модуля). Для этого вы должны установить libraryTarget
to umd
:
...
output: {
filename: 'index.js',
library:'my_lib_name',
libraryTarget: 'umd'
},
...
также хорошо будет добавить Vue
to externals
так что вы не упаковали дополнительные 200kb vue библиотека.
externals: {
vue: 'vue'
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
}
}
и добавьте его в peerDependencies
на package.json
:
...
"peerDependencies": {
"vue": "^2.0.0"
},
"devDependencies": {
"vue": "^2.0.0"
}
...
Если вам нужен существующий пример того, как упаковать vue.компонент js, вы можете посмотреть в одном из модулей, которые я поддерживаю:
https://github.com/euvl/vue-js-popover
особенно webpack.config.js
и package.json
будет интересно для вас.
Я искал аналогичное решение и нашел rollup https://github.com/thgh/rollup-plugin-vue2 (но не смог заставить его работать) и этот компонент https://github.com/leftstick/vue-expand-ball где весь код компонента компилируется в один повторно используемый js-файл. Я знаю, что это не правильное решение, но может быть достаточно для ваших нужд.