提示:vue3依赖14.15.1 或更高版本的 Node.js
前言
使用@vue/cli脚手架vue create创建
一、查看nodejs版本
1、查看nodejs版本
node -v
二、创建项目
vue create package-v3-cli
3、目录结构
三、安装依赖并启动文件
cd package-v3-cli
npm install element-plus --save
npm run serve
四、新建、修改组件引用
1、APP.vue
<script setup>
import ColorPicker from './components/colorPicker/Index.vue';
import TabsCom from './components/tabs/Index.vue';
</script>
<template>
<div>
<ColorPicker></ColorPicker>
<TabsCom></TabsCom>
</div>
</template>
<style scoped>
</style>
2、src/components/colorPicker/Index.vue
<template>
<div class="demo-color-block">
<span class="demonstration">With default value</span>
<el-color-picker v-model="color1" />
</div>
<div class="demo-color-block">
<span class="demonstration">With no default value</span>
<el-color-picker v-model="color2" />
</div>
</template>
<script setup>
import { ref } from 'vue'
const color1 = ref('#409EFF')
const color2 = ref()
</script>
<style>
.demo-color-block {
display: flex;
align-items: center;
margin-bottom: 16px;
}
.demo-color-block .demonstration {
margin-right: 16px;
}
</style>
3、src/components/tabs/Index.vue
<template>
<el-tabs v-model="activeName" class="v3-js-tabs" @tab-click="handleClick">
<el-tab-pane label="User" name="first">User</el-tab-pane>
<el-tab-pane label="Config" name="second">Config</el-tab-pane>
<el-tab-pane label="Role" name="third">Role</el-tab-pane>
<el-tab-pane label="Task" name="fourth">Task</el-tab-pane>
</el-tabs>
</template>
<script setup>
import { ref } from 'vue'
const activeName = ref('first')
const handleClick = (tab, event) => {
console.log(tab, event)
}
</script>
<style>
.v3-js-tabs > .el-tabs__content {
padding: 32px;
color: #6b778c;
font-size: 32px;
font-weight: 600;
background: #eee;
}
</style>
4、package.json关掉eslint
{
"name": "package-v3-cli",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.8.3",
"element-plus": "^2.7.2",
"vue": "^3.2.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
"vue/multi-word-component-names": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}
5、修改main.js
import { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');
6、目录结构
5、预览
五、配置打包package
1、新建src/index.js
//index.js
import './assets/main.css'
import ColorPicker from '@/components/colorPicker/Index.vue';
import TabsCom from '@/components/tabs/Index.vue';
export { ColorPicker,TabsCom} //实现按需引入*
const components = [ColorPicker,TabsCom];
const install = function(App, options) {
components.forEach((component) => {
App.component(component.name,component);
});
};
export default { install } // 批量的引入*
2、修改vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
lintOnSave: false,
publicPath:'./',
devServer:{
allowedHosts:"all",
historyApiFallback:true,
host: '127.0.0.1',
port: 80,
},
chainWebpack: config => {
config.module
.rule('js')
.include
.add('/dist')//刚才新建的目录
.end()
.use('babel')
.loader('babel-loader')
.tap(options => {
// 修改它的选项...
return options
})
},
css: {
extract: true,
},
})
3、修改package.json——main
{
"name": "package-v3-cli",
"version": "1.0.17",
"private": false,
"main": "./dist/package-v3-cli.umd.js",
"files": ["dist"],
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"lib": "vue-cli-service build --target lib --name package-v3-cli --dest dist src/index.js"
},
"dependencies": {
"core-js": "^3.8.3",
"element-plus": "^2.7.2",
"vue": "^3.2.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
"vue/multi-word-component-names": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}
引用
import {ColorPicker,TabsCom} from 'package-v3-cli';
import 'package-v3-cli/dist/package-v3-cli.css';
<template>
<div>
<h1>我是测试npm包package-v3-cli页面</h1>
<ColorPicker></ColorPicker>
<TabsCom></TabsCom>
</div>
</template>
4、修改package.json——module
{
"name": "package-v3-cli",
"version": "1.0.15",
"private": false,
"module": "./dist/package-v3-cli.umd.js",
"files": ["dist"],
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"lib": "vue-cli-service build --target lib --name package-v3-cli --dest dist src/index.js"
},
"dependencies": {
"core-js": "^3.8.3",
"element-plus": "^2.7.2",
"vue": "^3.2.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
"vue/multi-word-component-names": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}
引用
import {ColorPicker,TabsCom} from 'package-v3-cli';
import 'package-v3-cli/dist/package-v3-cli.css';
<template>
<div>
<h1>我是测试npm包package-v3-cli页面</h1>
<ColorPicker></ColorPicker>
<TabsCom></TabsCom>
</div>
</template>
5、修改package.json——exports
可以自定义引用css的名称和方式
{
"name": "package-v3-cli",
"version": "1.0.18",
"private": false,
"files": ["dist"],
"exports": {
"./style.css":"./dist/package-v3-cli.css",
".": {
"import": "./dist/package-v3-cli.umd.js"
}
},
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"lib": "vue-cli-service build --target lib --name package-v3-cli --dest dist src/index.js"
},
"dependencies": {
"core-js": "^3.8.3",
"element-plus": "^2.7.2",
"vue": "^3.2.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
"vue/multi-word-component-names": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}
引用——可以自定义引用css的名称和方式
import {ColorPicker,TabsCom} from 'package-v3-cli';
import 'package-v3-cli/style.css';
<template>
<div>
<h1>我是测试npm包package-v3-cli页面</h1>
<ColorPicker></ColorPicker>
<TabsCom></TabsCom>
</div>
</template>
六、打包发布
1、打包
npm run build
2、登录
npm config set registry https://registry.npmjs.org
npm login
3、发布
npm publish
七、安装使用
1、安装
npm install package-v3-cli --save
2、引用
不同入口和导出,引用有区别,在上面配置package.json时,做了展示
3、预览
七、自定义入口文件index.js
1、项目根目录下新建index.js
import {ColorPicker,TabsCom} from './dist/package-v3-cli.umd.js';
import './dist/package-v3-cli.css'
// 引用
// import { SourcePicker } from 'package-v3-cli'
export {ColorPicker,TabsCom};
// 引用
// import packageV3Cli from 'package-v3-cli'
// const { SourcePicker } = packageV3Cli
export default {ColorPicker,TabsCom};
2、package.json也是用main,module,exports三种方式其中一种就可以
"files": ["dist","index.js"],
"main": "./index.js",
"module": "./index.js",
"exports": {
"./style.css":"./dist/package-v3-cli.css",
".": {
"import": "./index.js"
}
},
3、完整配置
{
"name": "package-v3-cli",
"version": "1.0.19",
"private": false,
"main": "./index.js",
"module": "./index.js",
"files": ["dist","index.js"],
"exports": {
"./style.css":"./package-v3-cli.css",
".": {
"import": "./index.js"
}
},
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"lib": "vue-cli-service build --target lib --name package-v3-cli --dest dist src/index.js"
},
"dependencies": {
"core-js": "^3.8.3",
"element-plus": "^2.7.2",
"vue": "^3.2.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
"vue/multi-word-component-names": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}
4、打包后结构多一个index.js
4、使用
因为在index.js引入了./dist/package-v3-cli.css
所以在引入的时候,无需在引入css 直接引用模块即可
总结
踩坑路漫漫长@~@