предисловие
Я присоединился к новой компании несколько лет назад, и компания запросила создание библиотеки компонентов пользовательского интерфейса, В этом столбце подробно описаны идеи и шаги по созданию, и, наконец, есть адрес проекта на github.
1. Установите Vue CLI3
- Сначала вам нужно удалить Vue CLI2 с помощью команды
npm uninstall vue-cli -g
удалить; - введите команду
cnpm install -g @vue/cli
Установите Vue CLI3; - После завершения установки введите команду
vue --version
и проверьте, выше ли номер версии Vue CLI 3.0. Если да, установка прошла успешно.
Во-вторых, используйте Vue CLI3 для создания проекта проекта Vue.
- 1. Введите cmd в адресе папки, чтобы открыть инструмент командной строки.
-
2, введите инструмент командной строки
vue create foxit-ui
,foxit-ui
это имя проекта. -
3. Нажимайте клавиши «вверх» и «вниз», чтобы выбрать пункт «Выбрать функции вручную» (выбрать функции вручную), по умолчанию (babel, eslint) (установка по умолчанию).
- 4. Нажимайте клавиши вверх и вниз, а также клавишу пробела, чтобы выбрать функцию, которую необходимо установить.
- 5. Выберите версию Vue для использования, выберите версию Vue 2.0.
- 6. Выберите маршрутизатор в режиме истории, введите Y и нажмите Enter, чтобы перейти к следующему шагу.
- 7. Выберите язык прекомпиляции CSS, здесь выберите Меньше.
- 8. Выберите В выделенных файлах конфигурации и настройте Babel, ESLint и т. д. независимо вpackage.jsonвне файла.
- 9. Сохранять ли конфигурацию установки, введите y и нажмите Enter, чтобы перейти к следующему шагу.
- 10. Начните загрузку проекта проекта Vue. Если загрузка идет очень медленно, это проблема с сетью, вы можете подключить компьютер к мобильной сети.
- 11. Если он выглядит так, как показано на рисунке ниже, это означает, что загрузка прошла успешно.
- 12. Выполнить отдельно
cd foxit-ui
а такжеnpm run serve
Запустите проект, после успешного выполнения откройте его в браузереhttp://localhost:8080/, появится содержимое, показанное на следующем рисунке.
3. Преобразуйте проект проекта Vue в проект библиотеки компонентов Vue.
1. Реновация демо-зоны разработки компонентов
Демонстрация компонента будет в проекте проекта Vue.srcОн разрабатывается под папку, поэтому измените имя файла на примеры, чтобы сравнить изображение.
потому чтоsrcв папкеmain.jsЭтот файл является исходным файлом входа проекта Vue.srcПосле изменения имени папки необходимо перенастроить адрес файла записи.
Проект Vue, созданный с помощью Vue ClI3, должен создать проект в корневом каталоге проекта.vue.config.jsчтобы изменить конфигурацию веб-пакета.
module.exports = {
pages: {
index: {
entry: 'examples/main.js'
}
}
}
повторно выполнить командуnpm run serve
, будет обнаружена ошибка, как показано на фиг. Это потому что@
Этот псевдоним пути представляет собой имя папки src.Теперь, когда имя папки src больше не существует, он, естественно, сообщит об ошибке.
Независимо от этой ошибки здесь, сначала поставьте оригиналsrcОчистите файлы и код в папке. положить его вassetsпапка,componentsПапки удаляются.viewУдалите файлы в папке и создайте новуюdemo.vueфайл, содержание следующее
<template>
<div>
<h1>foxit-ui</h1>
</div>
</template>
Измените маршрут, вrouter/index.jsв файле.
import Vue from 'vue'
import VueRouter from 'vue-router'
import demo from '../views/demo.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'demo',
component: demo
},
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router
повторно выполнить командуnpm run serve
, открыть в браузереhttp://localhost:8080/, появится содержимое, показанное на следующем рисунке.
2. Построение области разработки компонента
Собрать библиотеку компонентов, содержащую множество компонентов.Чтобы уменьшить объем проекта после компиляции и упаковки, необходимо реализовать представленные здесь функции по требованию. Пользовательский интерфейс ссылочного элемента заключается в использовании подключаемого модуля babel-plugin-component для реализации представления по запросу.
Предпосылкой использования плагина babel-plugin-component для импорта библиотеки компонентов по запросу является то, что библиотека компонентов скомпилирована и упакована с несколькими входами.
При реализации многовходовой компиляции и упаковки следует учитывать, что в проекте библиотеки компонентов Vue среда разработки является одновходовой компиляцией, а рабочая среда — многовходовой компиляцией.
Поэтому используйте переменные средыNODE_ENV
Чтобы различать, является ли это средой разработки или производственной средой, когдаNODE_ENV
дляdevelopment
является средой разработки.
переменная средыNODE_ENV
в состоянии пройтиprocess.env.NODE_ENV
чтобы получить. следовательноvue.config.jsСоздайте две константы в файле, constDEV_CONFIG
Представляет собой конфигурацию среды разработки, константуBUILD_CONFIG
Представляет конфигурацию производственной среды.
const DEV_CONFIG = {
pages: {
index: {
entry: 'examples/main.js'
}
}
};
const BUILD_CONFIG = {
};
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
Создайте один в корневом каталогеpackagesПапки используются для областей разработки компонентов.
3. Реализовать библиотеку компонентов компиляции и упаковки с несколькими входами.
Адрес входного файла проекта находится в общем вебпакеentry
опции для настройки.entry
Значение опции — объект, так называемая многовходовая конфигурация находится вentry
Добавьте в параметр несколько пар "ключ-значение". Имя ключа можно использовать для настройки расположения упакованного файла. Значением ключа является системный абсолютный путь к файлу записи. Например, вpackagesВ папке разрабатываются два компонента, testA и testB.Входным файлом каждого компонента является файл в папке, в которой находится компонент.index.jsфайл, а основная записьpackages/index.jsдокумент.
module.exports = {
entry: {
index: 'E:\\project\\03UI\\foxit-ui\\packages\\index.js',
testA: 'E:\\project\\03UI\\foxit-ui\\packages\\testA\\index.js',
testB: 'E:\\project\\03UI\\foxit-ui\\packages\\testB\\index.js'
}
}
В Vue CLI3 сначала используйте chainWebpackconfig.entryPoints.delete('app')
Пучокentry
Удалите пару ключ-значение в приложении, а затем используйте configureWebpack, чтобы добавитьentry
. существуетvue.config.jsДобавьте следующую конфигурацию в файл.
const DEV_CONFIG = {
};
const BUILD_CONFIG = {
chainWebpack: config => {
config.entryPoints.delete('app');
},
configureWebpack: {
entry: {
index: 'E:\\project\\03UI\\foxit-ui\\packages\\index.js',
testA: 'E:\\project\\03UI\\foxit-ui\\packages\\testA\\index.js',
testB: 'E:\\project\\03UI\\foxit-ui\\packages\\testB\\index.js'
},
output: {
filename: '[name]/index.js',
libraryTarget: 'commonjs2',
}
},
};
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
Помните, что в производственной средеpackagesСодержимое папки добавляется в компиляцию.
Выполнение заказаnpm run build
Результат упаковки выглядит следующим образом
Как видно из приведенного выше рисунка,output.filename
значение[name]/index.js
середина[name]
то естьentry
имя ключа в опциях.
Что касаетсяlibraryTarget: 'commonjs2'
Это означает, что упакованное значение каждого входного файла будет присвоеноmodule.exports
, что также означает, что упакованные файлы будут использоваться в среде CommonJS.
Однако приведенная выше конфигурация входного файла жестко закодирована, и для реализации автоматической настройки необходимо использовать Nodejs.
4. Реализовать настройку автоматических файлов с несколькими входами
Благодаря приведенной выше конфигурации мы можем знать, что пока API Nodejs используется для полученияpackagesАбсолютный путь к входному файлу каждого компонента в папке склеивается в нужный формат и присваиваетсяentry
возможность автоматизировать настройку файлов с несколькими входами.
В Nodejs есть модуль fs для получения информации о файле и модуль пути для обработки путей. Идея реализации заключается в использовании API в модуле fs для полученияpackagesКаждое имя папки в папке выглядит какentry
, а затем используйте API в модуле пути, чтобы получитьpackagesв каждой папке под папкойindex.jsсистемный абсолютный путь какentry
ключевое значение.
Ниже приведены API, которые будут использоваться в модуле fs:
-
fs.readdirSync(path)
Вы можете асинхронно получить объект массива всех имен файлов в каталоге и его параметрыpath
это абсолютный путь, где находится каталог. -
fs.statSync(path)
Объект массива статистики файла может быть возвращен асинхронно, и его параметрыpath
это абсолютный путь, где находится файл.
Вот API, которые будут использоваться в модуле пути:
-
path.resolve([...paths])
Это эквивалентно выполнению операции каждого параметра cd слева направо в текущем каталоге и, наконец, возвращает путь к текущему каталогу. Например:path.resolve('/foo/bar','baz')
эквивалентно:cd /foo/bar //此时当前路径为 /foo/bar cd baz //此时路径为 /foo/bar/baz
-
path.join([...paths])
Объединяет все заданные сегменты пути вместе, используя системный разделитель в качестве разделителя, и нормализует результирующий путь.
Сначала опубликуйте код реализации и проанализируйте его шаг за шагом.
const fs = require('fs');
const path = require('path');
function resolve(dir) {
return path.resolve(__dirname, dir);
}
const join = path.join;
function getEntries(path) {
let files = fs.readdirSync(resolve(path));
const entries = files.reduce((ret, item) => {
const itemPath = join(path, item);
const isDir = fs.statSync(itemPath).isDirectory();
if (isDir) {
ret[item] = resolve(join(itemPath, 'index.js'));
} else {
const [name] = item.split('.');
ret[name] = resolve(itemPath);
}
return ret;
}, {})
return entries;
}
выполнить первымconst fs = require('fs'); const path = require('path');
Представьте модуль Nodejs fs и модуль пути.
существуетresolve
в функции__dirname
Использование делегирования в Nodejs__dirname
Системный абсолютный путь к файлу js, например, в случае__dirname
ценностьE:\project\03UI\foxit-ui
, то параметрdir
Это может быть имя файла или адрес файла, например:resolve('packages')
, возвращаемое значение равноE:\project\03UI\foxit-ui\packages
.
существуетgetEntries
Функция, когда параметрpath
дляpackages
когда, выполнитьfs.readdirSync(resolve(path))
вернуть['index.js', 'testA', 'testB']
назначить переменнойfiles
, и снова в инженерииpackagesЕсть ли у вас четкое представление о структуре каталогов папок?fs.readdirSync
полезность.
getEntries
Цель функции - вернутьentry
выбранное значение. Его формат значения следующий:
entry: {
index: 'E:\\project\\03UI\\foxit-ui\\packages\\index.js',
testA: 'E:\\project\\03UI\\foxit-ui\\packages\\testA\\index.js',
testB: 'E:\\project\\03UI\\foxit-ui\\packages\\testB\\index.js'
}
Здесь используйте массивreduce
метод сращиванияentry
.reduce
Первый параметр получает функцию как функцию обратного вызова, которая обрабатывается слева направо.files
Для каждого значения в массиве обработайте результат с помощью аргументов функции обратного вызова.ret
вернуть,ret
Начальное значение черезreduce
Второй параметр передается как{}
.
воплощать в жизньconst itemPath = join(path, item)
Сначала склеил обратноpackagesАдрес файла на следующем уровне каталога папок, например:packages\testA
,packages\index.js
.
ПредположениеitemPath
Значениеpackages\index.js
, получен относительный адрес входного файла, выполнитьresolve('packages\index.js')
После обработки можно получить абсолютный адрес своей системы.
ПредположениеitemPath
Значениеpackages\testA
, также используйтеjoin('packages\testA', 'index.js')
Объедините адрес, чтобы получитьpackages\testA\index.js
, а затем выполнитьresolve('packages\testA\index.js')
Процесс для получения системного абсолютного адреса файла входа компонента testA.
Тогда, пока судitemPath
Независимо от того, является ли ресурс, в котором находится путь, папкой или файлом, вы можете различать эти два сценария и работать с ними по отдельности.
может быть выполненfs.statSync(itemPath)
Возвращает информацию о ресурсеstats
объект, и этот объект имеетisDirectory
метод, чтобы определить, является ли ресурс папкой или файлом. Возвращает, если файл является папкойtrue
назначить переменнойisDir
.
когдаisDir
дляtrue
когда, выполнитьresolve(join(itemPath, 'index.js'))
Получите системный абсолютный путь файла записи и назначьте егоret[item]
.
когдаisDir
дляfalse
когда, выполнитьresolve(itemPath)
Получив системный абсолютный путь к входному файлу, назначьте егоret
Имя ключа нельзя использовать напрямуюitem
Выполнитьconst [name] = item.split('.')
, который использует деструктивное задание ES6, а затем назначает егоret[name]
.
Наконец положитьreduce
возвращаемое значение методаret
назначатьentries
и выйти обратно.
например, выполнитьgetEntries('packages')
Можно получить следующие объекты, которые можно использовать в качествеentry
Стоимость опции.
{
index: 'E:\\project\\03UI\\foxit-ui\\packages\\index.js',
testA: 'E:\\project\\03UI\\foxit-ui\\packages\\testA\\index.js',
testB: 'E:\\project\\03UI\\foxit-ui\\packages\\testB\\index.js'
}
затем вvue.config.jsИзмените конфигурацию в файле:
const fs = require('fs');
const path = require('path');
function resolve(dir) {
return path.resolve(__dirname, dir);
}
const join = path.join
function getEntries(path) {
let files = fs.readdirSync(resolve(path));
const entries = files.reduce((ret, item) => {
const itemPath = join(path, item);
const isDir = fs.statSync(itemPath).isDirectory();
if (isDir) {
ret[item] = resolve(join(itemPath, 'index.js'));
} else {
const [name] = item.split('.');
ret[name] = resolve(itemPath);
}
return ret;
}, {})
return entries;
}
const DEV_CONFIG = {
};
const BUILD_CONFIG = {
chainWebpack: config => {
config.module
.rule('js')
.include
.add('/packages')
.end()
config.entryPoints.delete('app');
},
configureWebpack: {
entry: {
...getEntries('packages')
},
output: {
filename: '[name]/index.js',
libraryTarget: 'commonjs2',
}
},
};
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
Выполнение заказаnpm run build
Результат упаковки выглядит следующим образом
Это согласуется с предыдущими результатами упаковки, указывая на то, что автоматическая конфигурация файлов с несколькими входами была успешно реализована.
5, настройте пакет компилятора библиотеки компонентов, уложил положение для генерации ресурсов
Здесь библиотека компонентов компилируется, упаковывается и помещается вlibпапка, вvue.config.jsДобавьте в файл следующую конфигурацию:
const BUILD_CONFIG = {
outputDir: 'lib',
}
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
6. Настройте место хранения компиляции стиля компонента и упаковки сгенерированных ресурсов.
Здесь файлы стилей, скомпилированные и упакованные библиотекой компонентов, помещаются вlib/styleпапка, вvue.config.jsДобавьте в файл следующую конфигурацию:
const BUILD_CONFIG = {
css: {
extract: {
filename: 'style/[name].css'
}
},
}
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
7. Закройте исходную карту
Закрытие исходной карты имеет два преимущества
- Сокращение времени компиляции и упаковки.
- Старайтесь не видеть исходный код в Sources с работающими инструментами разработчика F12.
существуетvue.config.jsДобавьте следующую конфигурацию в файл
const BUILD_CONFIG = {
productionSourceMap: false,
}
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
8. Удалите некоторые бесполезные функции, изначально скомпилированные и упакованные Vue CLI3.
- Удалите splitChunks, потому что каждый компонент упакован независимо, и нет необходимости извлекать общедоступные js каждого компонента.
- Удалить копию, не копировать содержимое общей папки в папку lib.
- Удалите html, только компоненты упаковки, не генерируйте html-страницы.
- Удалите предварительную загрузку и предварительную выборку, потому что html-страница не генерируется, поэтому эти два бесполезны.
- Удалить hmr, удалить горячее обновление.
существуетvue.config.jsДобавьте следующую конфигурацию в файл
const BUILD_CONFIG = {
chainWebpack: config => {
config.optimization.delete('splitChunks');
config.plugins.delete('copy');
config.plugins.delete('html');
config.plugins.delete('preload');
config.plugins.delete('prefetch');
config.plugins.delete('hmr');
},
}
В-четвертых, как разработать VUE компонент
Вышеупомянутое просто настроило среду публикации для библиотеки компонентов Vue. Давайте создадим среду разработки для библиотеки компонентов Vue.
Чтобы сначала разработать компонент Vue, вспомните, как использовать компонент Vue, например, как используется element-ui.
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
В проекте Vue вообще вmain.jsДобавьте приведенный выше код, чтобы использовать element-ui вVue.use(ElementUI)
является ключом.
Взгляните на пару официальной документации Vue.Vue.use
Определение
Vue.use(плагин), параметр: плагин {Object | Function}, использование: установить плагин Vue.js. Если подключаемый модуль является объектом, необходимо указать метод установки. Если плагин является функцией, он будет использоваться как метод установки. Когда вызывается метод установки, Vue передается в качестве параметра. Этот метод необходимо вызывать перед вызовом new Vue(). Когда метод установки вызывается одним и тем же плагином несколько раз, плагин будет установлен только один раз.
По сути, компонент Vue также является подключаемым модулем, и, как упоминалось выше, подключаемый модуль должен предоставлять метод установки. В использованииVue.use
При регистрации плагина вызывается метод install.
Давайте посмотрим на определение метода установки в официальной документации Vue.
Плагины Vue.js должны предоставлять метод установки. Первый параметр этого метода — конструктор Vue, а второй параметр — необязательный объект параметров.
Затем в методе установки используйтеVue.component
Зарегистрируйте разработанный компонент как глобальный компонент. так что черезVue.use
использовать компонент.
Еще один вопрос, где определить метод установки. Ответ дается прямо здесь, определяется во входном файле компонента. Что касается причины, то она связана с компиляцией и упаковкой webpack, поэтому здесь описываться не будет.
существуетpackagesсоздать папкуtestAпапку, пишем в ней компонент testA и создаемindex.jsФайл используется как входной файл компонента testA, и в него добавляется следующий код:
import test from './src/index.vue';
test.install = function (Vue) {
Vue.component(test.name, test);
};
export default test;
Vue.component
Первый параметр — это имя компонента, а второй параметр — это объект опций для компонента. Из приведенного выше кода вы можете увидеть объект параметров компонента.test
От./src/index.vue
импортный.
посмотриtestA/src/index.vueСодержимое файла:
<template>
<div>测试按需引入A</div>
</template>
<script>
export default {
name: "testA",
data() {
return {};
},
};
</script>
Хорошо ли вы знакомы с приведенным выше контентом, то есть с кодом, написанным при обычной разработке страниц Vue. Что касается объекта параметров компонентов, упомянутых вышеtest
то естьexport default { }
содержание в .
воплощать в жизньVue.component(test.name, test)
вtest.name
Для testA регистрируется глобальный компонент с именем testA.
Поскольку в библиотеке компонентов много компонентов, также требуется общий основной файл записи, вpackagesсоздать папкуindex.jsфайл, добавьте в него следующий код:
import testA from './testA'
export default {
install(Vue) {
Vue.use(testA);
},
}
На данный момент разработан Vue-компонент testA. Итак, как его отладить? Давайте создадим среду отладки компонентов, которую также можно назвать средой разработки компонентов.
ранее упоминалось, что оригиналsrcИзмените имя папки наexamplesОбласть отладки как компонент. тогда ты можешьexamplesв папкеmain.jsРазработанные компоненты импортируются в файл. Код реализации выглядит следующим образом:
import test from '@/index'
Vue.use(test);
в@
даpackagesПсевдоним для пути к папке, который находится вvue.config.jsнастраивается в файле.
const DEV_CONFIG = {
configureWebpack: {
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': resolve('packages'),
}
}
}
}
module.exports = process.env.NODE_ENV === 'development' ? DEV_CONFIG : BUILD_CONFIG;
существуетdemo.vueИспользуйте компонент testA, как показано ниже.
<template>
<div style="text-align:center">
<img alt="Vue logo" src="../assets/logo.png">
<testA></testA>
</div>
</template>
<script>
export default {
name: "demo",
data() {
return {
}
},
};
</script>
Выполнение заказаnpm run serve
, открыть в браузереhttp://localhost:8080/, появится содержимое, показанное на следующем рисунке.
Среда публикации и разработки такой библиотеки компонентов завершена. Ниже описано, как опубликовать библиотеку компонентов в npm.
5. Как опубликовать библиотеку компонентов в npm
1. Настройте имя библиотеки компонентов
существуетpackage.jsonФайл настроен следующим образом
{
"name": "foxit-ui"
}
Следует отметить, что имя этой библиотеки компонентов должно быть уникальным в npm и не может повторяться, иначе вам будет выдано сообщение о том, что у вас нет прав на изменение этой библиотеки при публикации.
2. Номер версии библиотеки стоимостных компонентов.
существуетpackage.jsonФайл настроен следующим образом
{
"version": "0.0.1"
}
Обратите внимание, что номер версии этой библиотеки компонентов не может быть повторен.Каждый раз, когда вы выпускаете ее, вы будете вручную обновлять номер версии, в противном случае вам будет предложено опубликовать ее в предыдущем выпуске.
3. Сделайте библиотеку компонентов общедоступной.
существуетpackage.jsonФайл настроен следующим образом
{
"private": false
}
Публикация в npm возможна только в том случае, если библиотека компонентов установлена как общедоступная.
4. Настройте ключевые слова, описание, автора
существуетpackage.jsonФайл настроен следующим образом
{
"description": "基于element ui 二次封装的组件库",
"keywords": [
"element",
"vue",
"foxit-ui"
],
"author": "foxit"
}
5. Настройте адрес файла основной записи
существуетpackage.jsonФайл настроен следующим образом
{
"main": "lib/index/index.js"
}
Главный входной файл — это относительный адрес основного входного файла, сгенерированного компиляцией и упаковкой библиотеки компонентов.При импорте компонента с импортом он фактически импортирует этот основной входной файл.
6. Установите игнорирование файлов, чтобы уменьшить размер пакета зависимостей.
Библиотека компонентов только скомпилированаlibпапка,package.jsonдокумент,README.mdФайл - это то, что нужно опубликовать. Больше ничего не нужно, Вам нужно создать его в корневом каталоге.npmignoreИгнорируйте ненужные ресурсы в файле, чтобы уменьшить размер пакетов зависимостей.
examples/
packages/
public/
node_modules/
vue.config.js
babel.config.js
output.js
postcss.config.js
.gitignore
.browserslistrc
7. Редактируйте и используйте документы
В README.md очень важно четко написать, как установить, как внедрить и использовать, какие параметры, методы, события и т.д.
8. Войдите в нпм
Во-первых, вам нужно зарегистрировать учетную запись на npm, процесс регистрации опущен.
Если вы настроите Taobao Mirror, сначала установите Mirror npm:
Выполнение заказаnpm config set registry http://registry.npmjs.org
Выполнение заказаnpm login
Введите имя пользователя, пароль и адрес электронной почты в соответствии с шагами и нажимайте Enter для каждого шага, чтобы перейти к следующему шагу.
9. Опубликовать в npm
Выполнение заказаnpm publish
, в случае успеха, как показано ниже
10. Синхронизируйте библиотеку компонентов с зеркалом Taobao.
ОткрытьЗеркало Taobao NPM, введите имя компонента foxit-ui для поиска, щелкните изображение ниже для синхронизации
6. Как импортировать компоненты по запросу
Чтобы продемонстрировать импорт компонентов по требованию, разработайте еще один компонент testB в библиотеке компонентов и опубликуйте его в npm.
Как упоминалось выше, используйте babel-plugin-component для импорта компонентов по запросу, а затем сначала выполните командуnpm install babel-plugin-import --save-dev
Установите плагин babel-plugin-import.
Выполнение заказаcnpm install foxit-ui --save
Установите библиотеку компонентов foxit-ui.
Создал в корневом каталоге.babelrc.jsфайл, если в корневом каталоге естьbabel.config.jsфайл, вы можете настроить его напрямую, содержание конфигурации выглядит следующим образом
module.exports = {
presets: [
'@vue/app'
],
"plugins": [
[
"import",
{
"libraryName": "foxit-ui",//组件库名称
"camel2DashComponentName": false,//关闭驼峰自动转链式
"camel2UnderlineComponentName": false//关闭蛇形自动转链式
}
],
]
}
существуетmain.jsДобавьте следующий код в файл
import {testA, testB} from 'foxit-ui';
Vue.use(testA);
Vue.use(testB);
Используйте это в своем проекте
<template>
<div>
<testA></testA>
<testB></testB>
</div>
</template>
<script>
export default {
data() {
return {
}
},
}
</script>
Отображение в браузере
Так почемуimport {testA, testB}
вместоimport {testC, testD}
,еслиimport {testC ,testD}
, произойдет следующая ошибка
import {testA, testB} from 'foxit-ui';
довольно
import testA from "foxit-ui/lib/testA";
import testB from "foxit-ui/lib/testB";
import {testC, testD} from 'foxit-ui';
довольно
import testC from "foxit-ui/lib/testC";
import testB from "foxit-ui/lib/testD";
В Foxit-ui / lib нет файлов Testc и Testd, поэтому приведенная выше ошибка.
почему этоimport {testA , testB}
, не забудьте настроить в конфигурации упаковки страницы файла с несколькими записямиentry
час,entry
Имя ключа значения параметра — это имя папки, в которой находится каждый компонент, иoutput.filename
да[name]/index.js
, имя папки, в которой компилируются и упаковываются ресурсы, созданные каждым компонентом, является именем папки, в которой изначально находился каждый компонент.
Разве не очень ясно, почемуimport {testA , testB}
, потому что имена папок ресурсов, сгенерированных двумя компонентами testA и testB, упакованы и сохранены как testA и testB соответственно.
Также почемуoutput.filename
да[name]/index.js
, вместо[name]/main.js
или[name]/out.js
.
Это потому чтоimport testA from "foxit-ui/lib/testA"
довольноimport testA from "foxit-ui/lib/testA/index.js"
.
Поэтому, когда пишете, как импортировать по требованию в документе, обязательно четко пишите метод импорта.
7. Как реализовать стиль импорта компонентов по запросу
Вышеприведенная конфигурация реализует введение компонентов по требованию, тогда следующая конфигурация реализует введение компонентов по требованию.автоматическийВведите соответствующие стили, чтобы вам не пришлось импортировать все стилиimport 'foxit-ui/lib/style/index.css'
.
в корневом каталоге.babelrc.jsфайл илиbabel.config.jsДобавьте следующую конфигурацию в файл.
module.exports = {
"presets": ["@vue/app"],
"plugins": [
[
"import",
{
"libraryName": "foxit-ui",//组件库名称
"camel2DashComponentName": false,//关闭驼峰自动转链式
"camel2UnderlineComponentName": false,//关闭蛇形自动转链式
"style": (name) => {
const cssName = name.split('/')[2];
return `foxit-ui/lib/style/${cssName}.css`
}
}
],
]
}
когдаstyle
Если параметр является функцией, возвращаемое значение функции представляет собой путь к файлу стиля компонента. его параметрыname
- относительный путь зависимого пакета, в котором находится компонент. Например, когда вводится компонент testA,name
ценностьfoxit-ui/lib/testB
.
В месте хранения сгенерированных ресурсов компиляции и упаковки стиля компонента, настроенного выше, он хранится вlib/styleВ папке имя файла стиля совпадает с именем компонента, как показано на следующем рисунке.
Итак, сначала выполнитеconst cssName = name.split('/')[2]
Получите имя текущего импортированного компонента и назначьте егоcssName
, затем соедините адресfoxit-ui/lib/style/${cssName}.css
и вернуться. Перезапустите проект, и последняя страница отобразится, как показано ниже.
постскриптум
адрес проекта:foxit-ui
В последующих колонках будет использоваться фактическая разработка компонента, чтобы познакомить вас с конкретными идеями разработки общедоступного компонента.