• npm 发布 使用 跟新 vue 插件


    创建 npm 插件

    创建vue 项目

    vue create [Project Name]  
    

    创建放插件的文件夹 src/views/npmPackage

     插件代码 src/npmPackage/packageMjDialog/index.vue

    1. <template>
    2. <div>
    3. <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
    4. <el-form-item label="活动名称" prop="name">
    5. <el-input v-model="ruleForm.name">el-input>
    6. el-form-item>
    7. <el-form-item>
    8. <el-button type="primary" @click="submitForm('ruleForm')">立即创建el-button>
    9. <el-button @click="resetForm('ruleForm')">重置el-button>
    10. el-form-item>
    11. el-form>
    12. div>
    13. template>
    14. <script>
    15. export default {
    16. name: "bjw-table",
    17. props:{
    18. },
    19. data() {
    20. return {
    21. ruleForm: {
    22. name: '',
    23. },
    24. rules: {
    25. name: [
    26. { required: true, message: '请输入活动名称', trigger: 'blur' },
    27. ]
    28. }
    29. };
    30. },
    31. methods: {
    32. submitForm(formName) {
    33. this.$refs[formName].validate((valid) => {
    34. if (valid) {
    35. alert('submit!');
    36. } else {
    37. console.log('error submit!!');
    38. return false;
    39. }
    40. });
    41. },
    42. resetForm(formName) {
    43. this.$refs[formName].resetFields();
    44. },
    45. initForm(obj){
    46. this.$nextTick(() => {
    47. let formDom = document.getElementsByClassName('demo-ruleForm'),
    48. {width,backgroundColor} = obj
    49. console.log(formDom,'========')
    50. for (let i = 0; i < formDom.length; i++) {
    51. formDom[i].style.width = `${width || 660}px`;
    52. formDom[i].style.backgroundColor = `${backgroundColor}`;
    53. console.log(formDom[i])
    54. console.log(formDom[i].children)
    55. }
    56. })
    57. }
    58. }
    59. };
    60. script>
    61. <style lang="less" scoped>
    62. .demo-ruleForm{
    63. widows: 500px;
    64. border-radius: 10px;
    65. background: skyblue;
    66. }
    67. style>

    style标签要用lang="less" scoped来修饰,否则样式会全局污染。

    在 插件文件夹下创建index.js(src/npmPackage)

    单个注册组件

    1. // 引入封装好的组件
    2. import bjwTable from "./packageMjDialog/index.vue";
    3. let install = function (Vue) {
    4. Vue.component(bjwTable.name, bjwTable);
    5. }
    6. export default install;

    批量注册组件

    1. // 引入封装好的组件
    2. import bjwTable from "./packageMjDialog/index.vue";
    3. import bjwButton from "./packageButton/index.vue"
    4. const arr = [bjwTable, bjwButton];
    5. const install = (Vue)=> arr.forEach((item) => Vue.component(item.name, item));
    6. export default install;

    这一步是封装组件中的重点,用到vueinstall公开方法。这个方法会在使用Vue.use(bjwTable)时被调用,并把插件注册到全局,在子组件的任何地方都可以使用此插件。

    打包组件

    配置vuepackage.json文件

    1. "scripts": {
    2. "serve": "vue-cli-service serve",
    3. "build": "vue-cli-service build",
    4. "lint": "vue-cli-service lint",
    5. "package": " vue-cli-service build --target lib ./src/views/npmPackage/index.js --name bjw-table --dest bjw-table"
    6. },

    --target lib:指定打包的目录
    --name:打包后的文件名字
    --dest:打包后的文件夹的名称

    执行打包命令

    npm run package
    

    此命令执行成功后,会在src同级目录生成bjw-table文件夹。

    bjw-table文件夹里面初始化初始化package.json文件

    创建package.json的步骤
    4.01、package name: 设置包名,也就是下载时所使用的的命令,设置需谨慎。
    4.02、version: 设置版本号,如果不设置那就默认版本号。
    4.03、description: 包描述,就是对这个包的概括。
    4.04、entry point: 设置入口文件,如果不设置会默认为index.js文件。
    4.05、test command: 设置测试指令,默认值就是一句不能执行的话,可不设置。
    4.06、git repository: 设置或创建git管理库。
    4.07、keywords: 设置关键字,也可以不设置。
    4.08、author: 设置作者名称,可不设置。
    4.09、license: 备案号,可以不设置。
    4.10、回车即可生成package.json文件,然后还有一行需要输入yes命令就推出窗口。
    4.11、测试package.json文件是否创建成功的命令npm install -g。

    默认生成

    npm init -y
    

    发布插件到npm仓库

    注册npm账号 官网

    设置npm源

    npm config set registry=https://registry.npmjs.org
    

    有些电脑可能本地的npm镜像源采用的是淘宝镜像源或者其它镜像源,如果想要发布npm包,需要把npm源切换为官方的npm源。不是所有的电脑都这样,我的电脑就不需要操作这一步。

    添加npm用户

    npm adduser  
    

    进入bjw-table目录,添加npm用户。指令提示填写用户名等等,如果之前设置过即可跳过此步。

    发布插件包到npm服务器

    npm publish
    

    bjw-table目录下执行命令,如果发布失败可能是名字重复了,改名字即可,发布成功后,可到npm官网查看自己发布的npm包。

    使用npm 插件

    下载安装发布的包

    npm install bjw-table --save

    注册组件

    main.js中

    1. // 引入组件结构
    2. import bjwTable from "bjw-table";
    3. // 引入组件样式
    4. import 'bjw-table/bjw-table.css'
    5. // 注册组件到全局
    6. Vue.use(bjwTable);

    使用插件

    1. <template>
    2. <div>
    3. <bjw-table ref='demoForm'> bjw-table>
    4. <bjw-btn>bjw-btn>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. data(){
    10. return{
    11. }
    12. },
    13. methods:{
    14. initDemoFrom(){
    15. this.$refs.demoForm.initForm({
    16. width:600,
    17. backgroundColor:'#ffffff'
    18. })
    19. }
    20. },
    21. mounted(){
    22. this.initDemoFrom()
    23. let box = document.getElementsByClassName('box')
    24. console.log(box[0].children)
    25. }
    26. }
    27. script>
    28. <style>
    29. style>

    更新插件

    1. 打包 src同级目录下  npm run package
    2. 初始化 进入打包后生成的文件夹   npm init -y. 或者手动设置 package.json 文件
    3. 版本跟新 npm version 1.1.1
    4. 发布  npm publish  

    注意:版本号不能重复

    参考资料

    npm发布vue插件步骤、组件、package、adduser、publish、getElementsByClassName、important、export、default、target、dest_web半晨的博客-CSDN博客_vue 发布插件

    vue+elementUi+dialog封装自定dialog部分属性,并打包成插件、npm install mj-dialog --save、display、justify、between_web半晨的博客-CSDN博客

    Mixed spaces and tabs no-mixed-spaces-and-tabs vue报错 问题解决方法_H@Z*rTE|i的博客-CSDN博客 

    npm包如何发布更新_前端劝退师儿的博客-CSDN博客_npm publish 更新

    npm publish 报错 【you or one of your dependencies are requesting a package version that is forbidden by your security policy】 - 下小朋友 - 博客园

     

  • 相关阅读:
    Taro React 系列文章 - 总目录
    链路追踪Skywalking快速入门
    C++常用格式化输出转换
    《idea 骚操作》
    rollback-only异常令我对事务有了新的认识
    Pythonmock基本使用
    R语言方差分析总结
    google hack常用语法介绍
    H2数据库--转载
    利用遥感影像计算大蒜种植面积
  • 原文地址:https://blog.csdn.net/weixin_41040445/article/details/126036878