# NPM发布模块

在我们进行多个项目开发的时候,有时候发现有的Vue模块在这些项目中是共用的,这个时候我们就可以把这个模块封装发到NPM上,然后再项目中安装引入就可以使用了。

下面我就来简单介绍一下发布NPM包的流程

# 一、项目创建

# 1. 使用简洁的webpack配置模板webpack-simple初始化项目

vue init webpack-simple vue-name
#简洁的webpack配置模板
1
2

# 2. 编写组件代码,本地进行调试

先编写组件代码,例如:

<template>
  <div class="hello">{{ msg }}</div>
</template>
<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
}
</script>
1
2
3
4
5
6
7
8
9
10
11

然后在App.vue中直接引入本地的组件

<HelloWorld msg="这是一个测试内容"/></HelloWorld>

import HelloWorld from "./components/HelloWorld";
1
2
3

# 二、本地组件测试没问题,改造成vue插件类型的

# 1. 创建一个index.js文件,将组件输出

import vueHelloWorld from './components/HelloWorld'; // 导入组件
const HelloWorld = {
  install (Vue, options) {
    Vue.component(vueHelloWorld.name, vueHelloWorld);
    // vuePayKeyboard.name 组件的name属性
    // 类似通过 this.$xxx 方式调用插件的 其实只是挂载到原型上而已
    // Vue.prototype.$xxx  // 最终可以在任何地方通过 this.$xxx 调用
    // 虽然没有明确规定用$开头  但是大家都默认遵守这个规定
  },
};
export default HelloWorld;// 导出..
1
2
3
4
5
6
7
8
9
10
11

# 2. 修改配置文件package.json

# 1) name

  • 名称,发布的模块名称,发布线上后,可以通过npm install xxxx来引用该模块,一般Vue组件以vue-开头

# 2) description

  • 描述,该模块的简单描述

# 3) version

  • 版本号,版本号分为A.B.C三位
  • A表示主版本号,如果有较大变动,且向下不兼容,需要更新,A为零时表示软件还在开发阶段
  • B表示次版本号,如果是新增了功能,而且向下兼容,需要更新
  • C表示补丁版本号,如修复bug

# 4)author

  • 作者信息

# 5)license

# 6)main

  • 主入口文件,该属性指定了程序的主入口文件。即如果你的模块被命名为foo,用户安装了这个模块并通过require("foo")来使用这个模块,那么require返回的内容就是main属性指定的文件中 module.exports指向的对象。

# 7)keywords

  • 关键词,可以通过npm搜索你填写的关键词找到你的模块

# 8)bugs

  • 填写一个bug提交地址或者一个邮箱,被你的模块坑到的人可以通过这里吐槽
{
  "name": "name",
  "description": "description",
  "version": "1.0.0",
  "author": "author>",
  "license": "MIT",
  "main": "dist/index.js",
  "keywords": [
    "vue",
  ],
  "private": true,
  "bugs": {
    "email": "email"
  },
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 3. 修改.gitignore文件

因为要用dist文件夹,所以在.gitignore文件中把dist/去掉

# 4. 修改配置文件webpack.config.js

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/lib/',
    filename: 'index.js',
    libraryTarget: 'umd',
    umdNamedDefine: true,
  },
};
1
2
3
4
5
6
7
8
9
10

# 5. 修改文件目录格式

# 1)删除不需要的文件

删除main.js、index.html、App.vue等不需要的文件

# 2)更改目录

HelloWorld
├── example                    # 存放demo的代码
├── lib                        # 真实引用编译过的代码
├── src                        # 存放源码的目录
├── style                      # 样式文件
├── .bebalrc                   # babel配置文件
├── index.js                   # 项目入口文件
├── package.json            
├── webpack.config.json        # 项目开发demo的时候 需要用到的webpack
└── README.md                  # 项目说明 安装 使用
1
2
3
4
5
6
7
8
9
10

# 6. 打包线下验证

# 1)打包压缩组件

npm run build
npm pack
#打包完成可以看到项目目录下多了一个压缩文件
1
2
3

# 2)新项目引入测试

# 安装打包文件 name:打包文件名称
npm install 路径/HelloWorld-1.0.0.tgz
# 引入组件
import HelloWorld from 'HelloWorld'
Vue.use(HelloWorld)
1
2
3
4
5

# 三、发布线上

npm login // 登陆 
npm publish // 发布
# 如果使用淘宝镜像 登陆会报错
# code E409
# npm ERR! 409 Conflict - PUT https://registry.npm.taobao.org/-/user/org.couchdb.user:XXX - conflict
# 请使用如下命令
npm login --registry http://registry.npmjs.org
npm publish --registry http://registry.npmjs.org
1
2
3
4
5
6
7
8

然后登陆自己的npm网站就可看到了

Last Updated: 5/11/2025, 2:02:16 PM