Vue

使用npm打包vue组件并发布到私服(一)

2019-03-03  本文已影响0人  maoruiily

前言

模块化开发是提高开发效率的有效途径之一,最近抽时间研究了下vue打包,作为新手真的不容易,遇到一些坑,总结记录下。

正文

如标题所言,本文涉及的技术有三个:npm,vue,私服,其实还有一个:webpack,如果对以上技术都不熟悉的朋友也不要紧,本文作者也是一个新手,之前也都没接触到这些技术,也是通过这两天在网上找资料来了解这些技术,我会把我整理的链接贴出来供大家参考

npm:

npm 与 package.json 快速入门 - 前端 - 掘金

vue:

介绍 — Vue.js

私服搭建:

私有Nuget服务搭建总结 - 简书
Nexus Repository Manager 3 搭建 npm 私服 - 知乎

webpack:

入门Webpack,看这篇就够了 - 简书

大家看完以上文档资料,对这些技术有了个基本的了解,下面就开始进入主题了

使用npm打包vue组件并发布到私服这件事可以拆分成两个任务:

任务一:使用npm打包vue组件
任务二:把打包好的vue组件发布到私服

一:使用npm打包vue组件(知道的同学直接跳过)

首先我们开发一个custom-switch组件,效果如下:

最终展示效果

创建custom-switch文件夹,切换到当前目录,使 vue init webpack-simple 命令创建一个新项目 custom-switch:

创建vue项目.png

目录结构如下:

项目目录结构

在src同级目录创建一个packages目录,再在packages目录下创建switch目录,我们的组件代码就放到switch目录下面

在switch目录创建custom-switch.vue,index.js 两个文件

custom-switch.vue

<template>
  <div>
    <span class="weui-switch" :class="{'weui-switch-on' : me_checked}" :value="value" @click="toggle"></span>
  </div>
</template>

<script>
  export default {
    name: "CustomSwitch",
    props: {
      value: {
        type: Boolean,
        default: true
      }
    },
    data() {
      return {
        me_checked: this.value
      }
    },
    watch: {
      me_checked(val) {
        this.$emit('input', val);
      }
    },
    methods: {
      toggle() {
        this.me_checked = !this.me_checked;
      }
    }
  }
</script>

<style>
  .weui-switch {
    display: block;
    position: relative;
    width: 52px;
    height: 32px;
    border: 1px solid #DFDFDF;
    outline: 0;
    border-radius: 16px;
    box-sizing: border-box;
    background-color: #DFDFDF;
    transition: background-color 0.1s, border 0.1s;
    cursor: pointer;
  }

  .weui-switch:before {
    content: " ";
    position: absolute;
    top: 0;
    left: 0;
    width: 50px;
    height: 30px;
    border-radius: 15px;
    background-color: #FDFDFD;
    transition: transform 0.35s cubic-bezier(0.45, 1, 0.4, 1);
  }

  .weui-switch:after {
    content: " ";
    position: absolute;
    top: 0;
    left: 0;
    width: 30px;
    height: 30px;
    border-radius: 15px;
    background-color: #FFFFFF;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
    transition: transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
  }

  .weui-switch-on {
    border-color: #1AAD19;
    background-color: #1AAD19;
  }

  .weui-switch-on:before {
    border-color: #1AAD19;
    background-color: #1AAD19;
  }

  .weui-switch-on:after {
    transform: translateX(20px);
  }
</style>

index.js

import CustomSwitch from './custom-switch'

/* istanbul ignore next */
CustomSwitch.install = function(Vue) {
  Vue.component(CustomSwitch.name, CustomSwitch);
};

export default CustomSwitch;

再改下 webpack.config.js,方便打包和调试运行

var path = require('path')
var webpack = require('webpack')

const NODE_ENV = process.env.NODE_ENV

module.exports = {
  // 修改打包入口
  entry: NODE_ENV == 'development' ? './src/main.js' : './packages/switch/index.js',

  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'custom-switch.js',
    library: 'custom-switch', // 指定的就是你使用require时的模块名
    libraryTarget: 'umd', // libraryTarget会生成不同umd的代码,可以只是commonjs标准的,也可以是指amd标准的,也可以只是通过script标签引入的
    umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
  }
...

如果要执行 npm run dev 命令看效果的话,还需要修改 index.html,app.vue,main.js 代码我就不贴了,需要的同学 点击源代码下载地址

激动人心的时刻到了,切换到项目根目录运行 npm run build 看有没有生成dist目录,我这里是运行成功了

npm_run_build.png

到此为止,我们的 任务一:使用npm打包vue组件的任务也就做完了

二:把打包好的vue组件发布到私服

参考上面 私服搭建 的文档,把私服搭建好了

把vue组件发布到私服可以分为以下几个步骤:

1.创建npm仓库
2.发布组件

创建npm仓库

设置-->Repository-->Repositories-->Create repository

创建npm仓库_1.png

仓库类型选择 npm(hosted)

创建npm仓库_2.png

Name 随便起一个,点击Create Repository,创建完成,详情如下

创建npm仓库_3.png

接着要创建一个Roles
Security-->Roles-->Create role-->Nexus role

创建npm仓库_4.png

打勾的需要填写,其他默认就可以,点击 Create role 就创建了一个对应此仓库的一个role

接着要把当前创建的 test-vue-role 关联一个用户上面(我这里选择已经创建好的用户)
Users-->点击已经创建好的用户-->双击test-vue-role-->Save

创建npm仓库_5.png

这样npm仓库就创建好了,等等,好像还有一个配置 (-_-)zz,不配置的话就会发布不成功,报以下错误

npm_publish_error.jpg

Realms-->添加 npm BearerToken Realm-->Save

创建npm仓库_6.png

好了,现在我们把做好的vue组件发布试试!
先登录私服:
npm login --registry=http://xxx.xxx.xxx:xxxx/repository/vue-test/
输入账号
输入密码
输入邮箱

登录npm仓库.png

第一次需要登录,下次发布组件就需要登录了

发布组件,终于到了这一步骤...
npm publish --registry=http://xxx.xxx.xxx:xxxx/repository/vue-test/
很愉快的输入这一命令,

image.png 怎么还报错 发布组件_error.png

看提示,貌似需要把 package.json 中 private 属性移除,试试再说

发布组件.png

哈哈,果然,发布成功了,上私服看看

组件发布完成,上私服看结果.png

OK,看到已经发布到自己的私服上面了

下面我们新建一个项目引用下这个组件,命令行输入以下指令
安装指定的组件
npm install custom-switch --registry=http://xxx.xxx.xxx:xxxx/repository/vue-test/

引用组件.png

可以看到已经成功的添加了
ps:命令后加上 --verbose 可以看下详细日志

总结:介绍了怎么开发一个vue组件,怎么创建一个npm私服,怎么发布组件,怎么引用组件,还是比较基础的,只是完成这件事,当然也留下了不少问题,比如:每次发布都需要跟上一个地址,好麻烦,这个我会研究解决这个问题,组件源码已上传到github,下载地址:https://github.com/maoruiily/custom-switch

大家在实际做的过程中如果有遇到什么问题,可以留言

ps:如果把组件上传到公网npm中心,可以参考:https://juejin.im/post/5b45df255188251b1d474860

上一篇下一篇

猜你喜欢

热点阅读