自定义Vue组件打包、发布到npm以及使用

1. 利用Vue的脚手架新建一个简易版的Vue项目my-project
vue init webpack-simple my-project
二,就是按照提示
cd my-project
npm i
npm run dev
三,开始写自己的组件。

为了方便管理更多的组件,我们这里在src目录下面新建了一个myPlugin的目录,在这里面存放我们开发的组件,

我这里是写了两个组件,一个是cropper,一个是Pagination,scss用来存放样式,有封装的js方法就建个js目录,没有就没必要。然后再建一个你写的vue文件,和一个index.js(为什么每个组件会建立一个index.js,后边会提到,按步骤继续走)。

四,编写你的组件,内容随意,主要注意export default出去的name值我们可以定义一下,后期可以作为组件的自定义name名。
五,在app.vue里面引入观察组件是否能正确使用,下图是app.vue的详情代码。
<template>
  <div id="app">
    <pagination :totalPage=15 :totalSize=300 @onChange='tap'></pagination>
    <cropper></cropper>
  </div>
</template>
 
<script>
import pagination from './myPlugin/pagination/index.vue'
import cropper from './myPlugin/cropper/index.vue'
export default {
     
  name: 'app',
  data () {
     
    return {
     
     
    }
  },
  methods:{
     
    tap(s){
     
      console.log(s,'出来了哈哈哈')
    }
  },
  components:{
     
    pagination,
    cropper
  }
}
</script>
 
<style lang="scss">
 
</style>
六,确定没问题了,就开始配置准备发布的东西,上面提到了为什么每个组件的文件夹都要建立一个index.js文件,在myPlugin单个封装的组件目录下的index.js中注册一次,(注意是单个组件的index.js)写入如下代码:
import ldcPagination from './index.vue';
ldcPagination.install = Vue => Vue.component(ldcPagination.name, ldcPagination);//.name就是开始说的vue文件暴露出来的name名,ldcPagination整个组件
export default ldcPagination;
七,在myPlugin根目录下的index.js里面对组件进行配置,(注意是myPlugin根目录下的index.js,不是单个组件下的)这里简单列举了一个组件,多个可直接引入放到components数组里面并在暴露出去的时候写入。

分析下代码(再不懂得去看下vue构造器),

第一步引入了ldcPagination组件

第二步定义了一个数组,可用来存放引入的组件,其目的是为了下方的insatll函数循环注册了一次引入ldc-ui组件后,vue.use(ldc-ui)就可以使用全部的组件,无需单个引入,install别忘了default出去。

ps:如果你是单个的组件可以直接省略 中间所有步骤,直接在这里import引入,export default出去就行

import ldcPagination from './Pagination/index.js';
const components = [
	ldcPagination
]
const install = function(Vue, opts = {
     }) {
     
	components.forEach(component => {
     
	    Vue.component(component.name, component);
    });
}
if (typeof window !== 'undefined' && window.Vue) {
     
  install(window.Vue);
}
 
export default {
     
	install,
	ldcPagination
}
 
八,开始配置webpack.config.js,这里把之前的entry(输入)和output(输出)注释掉并进行替换,主要是考虑想观察组件是否配置成功了就引入到app.vue里面运行观察使用main.js的入口文件,没问题就注释掉,使用如下的配置引入的index.js入口文件路径并更换output进行打包,准备发布的工作

var path = require('path')
var webpack = require('webpack')
const NODE_ENV = process.env.NODE_ENV;
module.exports = {
     
//entry: './src/main.js',
//output: {
     
//	  path: path.resolve(__dirname, './dist'),
//	  publicPath: '/dist/',
//	  filename: 'build.js'
//	},
	 entry: NODE_ENV == 'development' ? './src/main.js' : './src/myPlugin/index.js',
	 output: {
     
	 	path: path.resolve(__dirname, './dist'),
	 	publicPath: '/dist/',//路径
	 	filename: 'ldc-ui.js',//打包之后的名称
	 	library: 'ldc-ui', // 指定的就是你使用require时的模块名
	 	libraryTarget: 'umd', // 指定输出格式
	 	umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
	 },
...
}
九,开始进行配置pack.json。

version是版本号,发布一次之后,再次发布的时候必须更改此字段,否则会报错

可自行对比个人的json文件,就多了俩行代码,分别是private和main

private是否为私人的,这里选择false

main代表打包之后的文件路径

  "name": "ldc-ui",
  "description": "A Vue.js UI",
  "version": "1.0.2",
  "author": "",
  "license": "MIT",
  "private": false,
  "main": "dist/ldc-ui.js",
  "scripts": {
     
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
    "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
  },
  "dependencies": {
     
    "vue": "^2.5.11"
  },

在准备的最后最好是,建立一个.npmignore文件在里面屏蔽掉不需要上传的累赘,像我就屏蔽了如下内容(类似于git上传仓库中的.gitignore,直接建立文件重名名是不行的,最好用命令行去创建,不会建的百度一下)

.*
*.md
*.yml
build/
node_modules/
src/
test/
 
十,到这里,准备发布npm的东西。

1,去npm官网注册一个npm账号,按照步骤。

2,注册成功之后,在项目目录下的cmd命令行中输出

npm login 登陆你的用户,密码

npm publish 进行发布

你可能感兴趣的:(vue自定义打包,发布npm以及使用)