@vue/cli脚手架创建vue3项目,js+vue-cli生成mpm包,package.json中main,module,exports三种方式的使用,自定义入口文件index.js

提示: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 直接引用模块即可

总结

踩坑路漫漫长@~@

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值