美文网首页
用Vue开发通用组件(含vuex)并发布到npm

用Vue开发通用组件(含vuex)并发布到npm

作者: shi_quan | 来源:发表于2020-12-04 17:13 被阅读0次

创建项目

推荐使用 vue init webpack-simple project-name

webpack配置

var path = require("path");
var webpack = require("webpack");
const NODE_ENV = process.env.NODE_ENV;
const VueLoaderPlugn = require("vue-loader/lib/plugin");

module.exports = {
  entry: NODE_ENV == "development" ? "./src/main.js" : "./src/index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    publicPath: "/dist/", 
    filename: "v-drawer.js", // npm run build生成的文件名
    library: "v-drawer", // 指定的就是你使用require时的模块名
    libraryTarget: "umd", // 指定输出格式
    umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["vue-style-loader", "css-loader"]
      },
      {
        test: /\.vue$/,
        loader: "vue-loader",
        options: {
          loaders: {
            less: ["vue-style-loader", "css-loader", "less-loader"]
          }
        }
      },
      {
        test: /\.less$/,
        use: ["vue-style-loader", "css-loader", "less-loader"]
      },
      {
        test: /\.js$/,
        loader: "babel-loader",
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: "file-loader",
        options: {
          name: "[name].[ext]?[hash]"
        }
      }
    ]
  },
  resolve: {
    alias: {
      vue$: "vue/dist/vue.esm.js"
    },
    extensions: ["*", ".js", ".vue", ".json"]
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true,
    overlay: true
  },
  performance: {
    hints: false
  },
  plugins: [new VueLoaderPlugn()]
};

if (process.env.NODE_ENV === "production") {
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: '"production"'
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: false,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ]);
}

配置index.js

// 组件
import Drawer from "./components/Drawer";
import DrawerItem from "./components/Drawer-item";
// vuex的store文件
import drawerStore from "./store/drawer";

const components = [Drawer, DrawerItem];

// 这一步判断window.Vue是否存在,因为直接引用vue.min.js, 它会把Vue绑到Window上,我们直接引用打包好的js才能正常跑起来。
if (typeof window !== "undefined" && window.Vue) {
  window.Vue.component("v-drawer", components);
}

// opts是用户传入的store
const install = function(Vue, opts = {}) {
  if (!opts.store) {
    console.log("Please provide a store!");
  }
  // 动态注册store
  opts.store.registerModule("drawer", drawerStore);

  components.map(component => {
    Vue.component(component.name, component);
  });
};

if (typeof window !== "undefined" && window.Vue) {
  install(window.Vue);
}

export default {
  install,
  Drawer,
  DrawerItem
};

PS:注意在发布的时候,readme文件要提醒用户注入vuex和store,例如:

// main.js
import txDrawer from "tx-drawer";
// 你项目的store
import store from "./store";
/*
 txDrawer内部的store会注册到你的项目的store;
 txDrawer的store名为drawer,使用了命名空间
*/
Vue.use(txDrawer, { store });

这样我们组件内部的store才能正常使用。

打包发布

1、 npm run build
2、npm pack会生成.tgz包,npm install xxx.tgz即可安装到其他项目进行调试。
3、到npm官网注册账号: https://www.npmjs.com/
4、npm login登录个人账号
5、npm publish发布。记得把.tgz包删除,不然会连同tgz包一起发布。每次发布都要修改版本号,即package.json文件的"version": "0.0.1",

参考

demo:npm install tx-drawer
gitee:https://gitee.com/shiquan1442/tx-drawer/tree/master

从零开始开发一个vue组件打包并发布到npm (把vue组件打包成一个可以直接引用的js文件) - 进军的蜗牛 - 博客园 (cnblogs.com)

相关文章

  • 用Vue开发通用组件(含vuex)并发布到npm

    创建项目 推荐使用 vue init webpack-simple project-name webpack配置 ...

  • vue 搭建组件库(转)vue-cli 3.0

    使用vue-cli3搭建团队的组件库并发布到npm 1.安装vue-cli3并创建一个项目 首先我们先安装开发必要...

  • vuex

    关于vuex vuex 是适用于vue框架的状态管理工具,适用于组件与组件之间传值。 vue安装 npm安装命令:...

  • vuex状态管理

    vue-cli开发中,多个组件间通信可以采用vuex状态管理,使多个实例共享一份数据 1.安装vuex npm i...

  • vuex在vue-cli中的使用简介

    安装 vuex : npm install vuex --save 1.在新建的vue-cli项目中,新建两个组件...

  • vue开发 —— 发布组件到Npm仓储服务

    兼职快递,不怕风吹雨淋,只为宝贵的货物安全到客户手上 前序: 仅作为笔记测试使用,切莫复制了事 此搭建整合了网上以...

  • vue开发公共组件并发布到npm

    写在前面 作为一名合格的前端开发,想必大家都会有过这样的烦恼:上个项目写过这个功能(组件),这个项目又有相似的需求...

  • Vue 学习记录二

    组件化: 动态组件 父子组件 插槽 数据共享(Vuex) Vue Router: 生命周期: Plugin 开发:...

  • Vue 图片/文件上传组件 -- 轻量版 NPM vue-im

    2020.1.20 更新: Vue 组件发布到 npm,安装: HTML 代码: 这里的 input 元素是隐藏的...

  • vue 组件插槽

    一、vue插槽有什么用 插槽语法是vue中实现内容分发的api,用于复合组件开发。该技术在通用组件库开发中有大量应...

网友评论

      本文标题:用Vue开发通用组件(含vuex)并发布到npm

      本文链接:https://www.haomeiwen.com/subject/ekasvktx.html