基于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实现动态增加删除表格行(兼容IE/FF)
Apr 02 Javascript
地震发生中逃生十大法则
May 12 Javascript
妙用Jquery的val()方法
Jun 27 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
更快的异步执行(setTimeout多浏览器)
Aug 12 Javascript
Javascript变量的作用域和作用域链详解
Apr 02 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
基于vue实现一个禅道主页拖拽效果
May 27 Javascript
vue el-table实现行内编辑功能
Dec 11 Javascript
js实现点击生成随机div
Jan 16 Javascript
原生JS实现微信通讯录
Jun 18 Javascript
浅谈 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
Yii2中cookie用法示例分析
2016/07/18 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
JS 显示当前日期与时间的代码
2010/03/24 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
python http基本验证方法
2018/12/26 Python
用python绘制樱花树
2020/10/09 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
趣味运动会活动方案
2014/02/12 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
委托培训协议书
2014/11/17 职场文书
晚会开幕词范文
2016/03/04 职场文书