Компонент Vue публикует весь процесс npm
Запишите процесс выпуска компонента, см.Режим библиотеки Vue cli3 для сборки библиотеки компонентов и публикации npm
Начало
Во-первых, мы создаем проект vue с нуля с помощью vue-cli3.
vue create my-project
Это выглядит так:
настроить каталог
После установки проекта изменим структуру каталогов
.
...
|-- examples // 原 src 目录,改成 examples 用作示例展示
|-- packages // 新增 packages 用于编写存放组件
...
.
После модификации мы обнаружим ошибку при запуске проекта, это связано с тем, что структура каталогов была изменена, а папка packges добавлена нами, вебпак не может ее получить и скомпилировать, нам нужно добавить ее в вебпак.
Мы создадим новый файл конфигурации Vue.config.js, дополнительный файл конфигурации, предоставленный Vue-CLI3, в котором мы можем настроить все конфигурации WebPack в целом проект. Мы можем идти напрямуюконфигурация vue-cli3скопировать иchainWebpackдаст нам цепные операции
// vue-config.js
module.exports = {
// 修改 src 目录 为 examples 目录
pages: {
index: {
// page 的入口
entry: 'examples/main.js', // 把src 修改为examples
// 模板来源
template: 'public/index.html',
// 在 dist/index.html 的输出
filename: 'index.html'
}
},
// 扩展 webpack 配置,使 packages 加入编译
/* chainWebpack 是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。 */
chainWebpack: config => {
config.module
.rule('js')
.include
.add(__dirname + 'packages') // 注意这里需要绝对路径,所有要拼接__dirname
.end()
.use('babel')
.loader('babel-loader')
.tap(options => {
// 修改它的选项...
return options
})
}
}
Выше приведена базовая конфигурация, далее приступаем к созданию компонента
написать компоненты
Здесь я попробую это с компонентом кнопки. Создайте новую папку comColorButton и файл index.js в ранее созданном каталоге пакетов, а затем создайте папку src и файл index.js в папке comColorButton Структура каталога выглядит следующим образом:
|——
|——packages
| |——index.js
| |——comColorButton
| |——index.js
| |——src
| |——color-button.vue
|——
Это содержимое color-button.vue
<!-- color-button.vue -->
<template>
<span class="color-button">
<button :class="[type, disabled?'disabled':'']" :disabled="disabled">
<slot></slot>
</button>
</span>
</template>
<script>
export default {
name:'ComColorButton',
props:{
type:{
type:String,
default:'primary'
},
disabled:{
type:Boolean,
default:false
},
},
data () {
return {
}
}
}
</script>
<style lang='scss'>
$pColor:#333;
$sColor:#0db677;
$wColor:orange;
$dColor:red;
$disabledColor:gray;
.color-button{
display: inline-block;
margin-right:10px;
button{
display: inline-block;
padding:10px 20px;
border:2px solid $pColor;
background:#fff;
font-size: 16px;
width:auto;
cursor: pointer;
transition:all 0.5s;
&:hover{
box-shadow: 100px 0px 0px 0px $pColor inset;
color:#fff;
}
&.success{
border:2px solid $sColor;
color: $sColor;
&:hover{
box-shadow: 100px 0px 0px 0px $sColor inset;
color:#fff;
}
}
&.warning{
border:2px solid $wColor;
color: $wColor;
&:hover{
box-shadow: 100px 0px 0px 0px $wColor inset;
color:#fff;
}
}
&.danger{
border:2px solid $dColor;
color: $dColor;
&:hover{
box-shadow: 100px 0px 0px 0px $dColor inset;
color:#fff;
}
}
&.disabled{
border:2px solid $disabledColor;
color: $disabledColor;
cursor:not-allowed ;
&:hover{
box-shadow:none;
color: $disabledColor;
}
}
}
}
</style>
Вот index.js внутри папки comColorButton
// 导入组件,组件必须声明 name
import ComColorButton from './src/color-button.vue'
// 为组件提供 install 安装方法,供按需引入
ComColorButton.install = function (Vue) {
Vue.component(ComColorButton.name, ComColorButton)
}
// 默认导出组件
export default ComColorButton
Вот index.js внутри папки пакетов
import ComColorButton from './comColorButton'
// 存储组件列表
const components = [
ComColorButton
]
/*
定义install 方法,接收Vue作为参数,如果使用use注册插件,则所有的组件都将被注册
*/
const install = function (Vue) {
// 判断是否安装
if(install.installed){return}
// 遍历所有组件
components.map(item => {
Vue.component(item.name,item)
})
}
// 判断是否引入文件
if(typeof window !== 'undefined' && window.Vue){
install(window.Vue)
}
export default{
install,
ComColorButton
}
После вышесказанного компонент записывается, и следующим шагом является введение компонента
/* main.js */
// 导入组件库
import ComColorButton from './../packages/index'
// 注册组件库
Vue.use(ComColorButton)
Используйте библиотеку компонентов
<template>
<div class="hello">
<com-color-button type="success" :disabled="false">按钮</com-color-button>
<com-color-button :disabled="true">按钮</com-color-button>
</div>
</template>
Мы видим эффект:
Опубликуйте npm для удобства использования прямо в проекте.
1. В package.json добавлена новая команда для компиляции в библиотеку
В режиме библиотеки Vue является внешним, что означает, что даже если Vue введен в код, упакованный файл не содержит Vue.
Ниже добавляем в скрипты новую команду npm run lib
- --target: цель сборки, по умолчанию используется режим приложения. Эта модификация включает режим библиотеки для lib.
- --Dest: выходной каталог, по умолчанию DIST. Здесь мы меняем на lib
- [entry]: последний параметр — это файл входа, по умолчанию — src/App.vue. Здесь мы указываем каталог скомпилированных пакетов/библиотек компонентов.
"scripts": {
// ...
"lib": "vue-cli-service build --target lib --name vcolorpicker --dest lib packages/index.js"
}
Выполните команду компиляции библиотеки
npm run lib
2. Настройте поля, опубликованные в npm, в файле package.json.
- Имя: имя пакета, которое уникально. Вы можете искать имя на официальном сайте NPM. Если он существует, вам нужно изменить имя.
- version: номер версии. Номер версии необходимо изменять каждый раз, когда он публикуется в npm, он не может совпадать с историческим номером версии.
- описание: описание.
- main: входной файл, это поле должно указывать на наш окончательный скомпилированный файл пакета.
- ключевое слово: ключевое слово с пробелами для разделения слов, которые вы хотите, чтобы пользователь наконец искал.
- автор: автор
- private: независимо от того, является ли он закрытым или нет, его необходимо изменить на false перед публикацией в npm.
- лицензия: открытый протокол Ниже приведены эталонные настройки.
"name": "com-color-button",
"version": "0.1.3",
"description": "基于 Vue 的按钮",
"main": "lib/comColorButton.umd.min.js",
"keyword": "colorButton button color",
"private": false,
3. Добавьте файл .npmignore, чтобы игнорировать файл выпуска.
Когда мы публикуем в npm, нужно опубликовать только скомпилированный каталог lib, package.json и README.md. Поэтому нам нужно настроить игнорирование каталогов и файлов. Как и в случае с синтаксисом .gitignore, какие файлы необходимо отправить, зависит от их фактической ситуации.
# 忽略目录
examples/
packages/
public/
# 忽略指定文件
vue.config.js
babel.config.js
*.map
4. Войдите в нпм
Во-первых, вам нужно зарегистрировать учетную запись на npm, и обратить внимание на подтверждение вашего адреса электронной почты, иначе он не будет опубликован позже. Если зеркало Taobao настроено, сначала установите его обратно на зеркало npm.
npm config set registry http://registry.npmjs.org
Затем выполните команду входа в систему на терминале и введите имя пользователя, пароль и адрес электронной почты для входа в систему.
npm login
5. Опубликовать в npm
Выполните команду публикации, чтобы опубликовать компонент в npm.
npm publish
6. Успешный релиз
Через несколько минут после успешного выпуска вы можете просмотреть пакеты своей учетной записи npm или выполнить поиск на официальном сайте npm.
Перейдите к npm, чтобы проверить, мы видим, что выпуск пакетов прошел успешно, как показано ниже:
7. Используйте недавно выпущенную библиотеку компонентов
Установить
cnpm install com-color-button -S
представлять
<!--main.js-->
import ComColorButton from 'com-color-button'
import 'com-color-button/lib/comColorButton.css'
Vue.use(ComColorButton)
используемые компоненты
...
<com-color-button type="success">按钮</com-color-button>
...
Это все закончится, и это отключение, доступно.