基于vue如何发布一个npm包的方法步骤


Posted in Javascript onMay 15, 2019

前言:工作的时候总是使用别人的npm包,然而我有时心底会好奇自己如何发布一个npm包呢,什么时候自己的包能够被很多人喜欢并使用呢...今天我终于迈出了第一步。

前提:会使用 npm,有 vue 基础,了解一点 webpack

Are you ready? Go!

一、编写自己的npm包

1. 新建一个空文件夹

2. 进入文件夹,终端(cmd)运行 npm init

基于vue如何发布一个npm包的方法步骤

完成后会在目录下生成一个 package.json 文件

我们可以根据自己的需要补充文件内容

这是我的:

{
 "name": "bing-test-publish-npm",
 "version": "1.0.0",
 "description": "布一个npm包",
 "main": "index.js",
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "start": "webpack-dev-server --hot --inline",
  "build": "webpack --display-error-details --config webpack.config.js"
 },
 "author": "bing",
 "license": "ISC",
 "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-polyfill": "^6.26.0",
    "babel-preset-es2015": "^6.24.1",
    "css-loader": "^0.28.7",
    "es6-promise": "^4.1.1",
    "less": "^2.7.3",
    "less-loader": "^4.0.5",
    "style-loader": "^0.19.0",
    "url-loader": "^0.6.2",
    "vue": "^2.5.9",
    "vue-hot-reload-api": "^2.2.4",
    "vue-html-loader": "^1.2.4",
    "vue-loader": "^13.5.0",
    "vue-router": "^3.0.1",
    "vue-style-loader": "^3.0.3",
    "vue-template-compiler": "^2.5.9",
    "vuex": "^3.0.1",
    "webpack": "^3.9.1",
    "webpack-dev-server": "^2.9.5"
 }
}

3. 配置完后,命令行运行 npm install 安装依赖包,安装完会生成一个node_modules目录

4. 接下来新建两个文件夹 src(开发目录),dist(发布目录)

5. 然后我们就可以在 src 目录下编写自己的组件吧

我的文件目录

基于vue如何发布一个npm包的方法步骤

app.vue

<template>
  <div class="helloName">
    <input type="text" placeholder="请输入姓名" v-model="yourName"></input>
    <div v-if="name">hello<span class="name">{{name}}!</span></div>
  </div>
</template>
<script>
  export default {
    name:'helloName',
    data () {
      return {
        yourName: ''
      }
    },
    methods: {
 
    },
    created(){
    }
  }
</script>
<style>
</style>

index.js

import helloName from './app.vue'
export default helloName

webpack.dev.conf.js

const path = require("path");
const webpack = require("webpack");
const uglify = require("uglifyjs-webpack-plugin");
 
module.exports = {
  devtool: 'source-map',
  entry: "./src/index.js",//入口文件,src目录下的index.js文件,
  output: {
    path: path.resolve(__dirname, './dist'),//输出路径,就是新建的dist目录,
    publicPath: '/dist/',
    filename: 'helloName.min.js',
    libraryTarget: 'umd',
    umdNamedDefine: true
  },
  module: {
    rules: [{
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.less$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" },
          { loader: "less-loader" }
        ]
      },
      {
        test: /\.js$/,
        exclude: /node_modules|vue\/dist|vue-router\/|vue-loader\/|vue-hot-reload-api\//,
        loader: 'babel-loader'
      },
      {
        test: /\.(png|jpg|gif|ttf|svg|woff|eot)$/,
        loader: 'url-loader',
        query: {
          limit: 30000,
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  },
  plugins: [
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: JSON.stringify("production")
      }
    })
  ]
}

文件写好后,我们运行 npm run build,结果是会在 dist 目录下生成一个helloName.min.js,就是我们在 webpack.dev.conf.js 中 filename 的值

基于vue如何发布一个npm包的方法步骤

6. 将 package.json 中的 main 字段指向新生成的 helloName.min.js

7. 新建一个.npmignore文件(npm忽略文件),可以把不需要发布的文件忽略,如果只有 .gitignore,没有 .npmignore,则会使用 .gitignore

如:

.*
*.md
*.yml
build/
node_modules/
src/
test/
gulpfile.js

二、发布npm包

1. 到 https://www.npmjs.com 注册一个账号

2. 进入你的项目根目录,运行 npm login

会输入你的用户名、密码和邮箱

3. 登录成功后,执行 npm publish,就发布成功啦,我们可以在官网看到

基于vue如何发布一个npm包的方法步骤

三、使用自己的npm包

接下来我们在其他项目中使用自己刚发布的npm包

1. 我们进入我们的项目目录运行 npm(或cnpm) installbing-test-publish-npm(我们刚发布的包)

基于vue如何发布一个npm包的方法步骤

2. 在需要使用此包的页面引入,并使用

<template>
 <div>
  我的npm包
  <helloName></helloName>
 </div>
</template>
<script>
 import helloName from 'bing-test-publish-npm'
export default {
 name: 'npm',
 data () {
  return {
  }
 },
 components: {
  helloName
 }
}
</script>

这时我发现我的控制台报错了,原来是编码错误,因此,我们需要修改更新代码

<template>
  <div class="helloName">
    <input type="text" placeholder="请输入姓名" v-model="yourName"></input>
    <div v-if="yourName">hello<span class="name">{{yourName}}!</span></div>
  </div>
</template>
<script>
  export default {
    name:'helloName',
    data () {
      return {
        yourName: ''
      }
    },
    methods: {
 
    },
    created(){
    }
  }
</script>
<style>
</style>

四、更新npm包

1. 修改完代码后,我们需要修改 package.json 的version版本

规则:对于"version":"x.y.z"

1.修复bug,小改动,增加z

2.增加了新特性,但仍能向后兼容,增加y

3.有很大的改动,无法向后兼容,增加x

2. 修改后 运行 npm run build, npm publish 就成功更新了包的版本

3. 使用时需要

  • 卸载之前安装的包 npm uninstallbing-test-publish-npm
  • 重新安装 npm installbing-test-publish-npm
  • 可通过 npm listbing-test-publish-npm 查看到版本已是最新的版本

五、最终效果

基于vue如何发布一个npm包的方法步骤

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript取消文本选定的实现代码
Nov 14 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
js字符串转成JSON
Nov 07 Javascript
JS与C#编码解码
Dec 03 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
c#程序员对TypeScript的认识过程
Jun 19 Javascript
jQuery xml字符串的解析、读取及查找方法
Mar 01 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 Javascript
javascript随机变色实例代码
Oct 15 Javascript
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 #Javascript
JavaScript页面倒计时功能完整示例
May 15 #Javascript
vue组件间通信六种方式(总结篇)
May 15 #Javascript
JS正则表达式封装与使用操作示例
May 15 #Javascript
微信小程序实现授权登录
May 15 #Javascript
基于vue实现一个神奇的动态按钮效果
May 15 #Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 #Javascript
You might like
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
destoon复制新模块的方法
2014/06/21 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
Python对象转换为json的方法步骤
2019/04/25 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Django REST framwork的权限验证实例
2020/04/02 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
给老师的检讨书
2014/02/11 职场文书
公司总经理岗位职责
2014/03/15 职场文书
团队精神的演讲稿
2014/05/14 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
实习协议书
2015/01/27 职场文书
2015年保送生自荐信
2015/03/24 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
Python超详细分步解析随机漫步
2022/03/17 Python
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers