美文网首页Vue
使用npm打包vue组件并发布到私服(一)

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

作者: maoruiily | 来源:发表于2019-03-03 11:07 被阅读0次

    前言

    模块化开发是提高开发效率的有效途径之一,最近抽时间研究了下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

    相关文章

      网友评论

        本文标题:使用npm打包vue组件并发布到私服(一)

        本文链接:https://www.haomeiwen.com/subject/etljuqtx.html