<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue 組件封裝 并使用 NPM 發布的教程

        來源:懂視網 責編:小采 時間:2020-11-27 22:06:38
        文檔

        Vue 組件封裝 并使用 NPM 發布的教程

        Vue 組件封裝 并使用 NPM 發布的教程:正文開始 Vue 開發插件 我們可以先查看Vue的插件的開發規范 我們開發的之后期望的結果是支持 import、require 或者直接使用 script 標簽的形式引入,就像這樣: ps: 這里注意一下包的名字前綴是 unisoft ,組件的名字前綴是 uni import Un
        推薦度:
        導讀Vue 組件封裝 并使用 NPM 發布的教程:正文開始 Vue 開發插件 我們可以先查看Vue的插件的開發規范 我們開發的之后期望的結果是支持 import、require 或者直接使用 script 標簽的形式引入,就像這樣: ps: 這里注意一下包的名字前綴是 unisoft ,組件的名字前綴是 uni import Un

        ps: 這里我選擇了 use sass 因為之后開發組件會用到

        目錄結構如圖:

        ├── src/                           // 源碼目錄
        │   ├── packages/                  // 組件目錄
        │   │   ├── switch/                // 組件(以switch為例)
        │   │   ├── uni-switch.vue        // 組件代碼
        │   │   ├── index.js               // 掛載插件
        │   ├── App.vue                    // 頁面入口
        │   ├── main.js                    // 程序入口
        │   ├── index.js                   // (所有)插件入口
        ├── index.html                     // 入口html文件

        開發單個組件:

        先看一下目標效果:

        開始開發:

         在 packages 文件夾下新建一個 switch 文件夾用來存放 switch 組件的源碼,繼續在 switch 文件夾中新建 uni-switch.vue 和 index.js 文件

        uni-switch.vue 組件:

        <template>
         <div class="uni-switch">
         <div class="wrapper">
         <span><slot></slot></span>
         <div :class="[{closed: !checked}, 'switch-box']"
         @click="handleChange(value)">
         <span :class="{closed: !checked}"></span>
         </div>
        
         <input
         type="checkbox"
         @change="handleChange"
         :true-value="activeValue"
         :false-value="inactiveValue"
         :disabled="disabled"
         :value="value"/>
         </div>
         </div>
        
        </template>
        
        <script>
         export default {
         name: "UniSwitch",
         data() {
         return {}
         },
         props: {
         value: {
         type: [Boolean, String, Number],
         default: false
         },
         activeValue: {
         type: [Boolean, String, Number],
         default: true
         },
         inactiveValue: {
         type: [Boolean, String, Number],
         default: false
         },
         disabled: {
         type: Boolean,
         default: false
         }
         },
         computed: {
         checked() {
         return this.value === this.activeValue;
         }
         },
         methods: {
         handleChange(value) {
         this.$emit('input', !this.checked ? this.activeValue : this.inactiveValue);
         }
         }
         }
        </script>

        index.js:

        // UniSwitch 是對應組件的名字,要記得在 moor-switch.vue 文件中還是 name 屬性哦
        import UniSwitch from './UniSwitch.vue';
        UniSwitch.install = Vue => Vue.component(UniSwitch.name, UniSwitch);
        export default UniSwitch;

        好了基本完成了,但是為了將所有的組件集中起來比如我還有 select、 input、 button 等組件,那么我想要統一將他們放在一個文件這中便于管理

        所以在 App.vue 同級目錄我新建了一個 index.js 文件

        import UniSwitch from './packages/switch/index';
        import UniSlider from './packages/slider/index';
        import UniNumberGrow from './packages/number-grow/index';
        import './common/scss/reset.css'
        // ...如果還有的話繼續添加
        
        const components = [
         UniSwitch,
         UniSlider,
         UniNumberGrow
         // ...如果還有的話繼續添加
        ]
        
        const install = function (Vue, opts = {}) {
         components.map(component => {
         Vue.component(component.name, component);
         })
        }
        
        /* 支持使用標簽的方式引入 */
        if (typeof window !== 'undefined' && window.Vue) {
         install(window.Vue);
        }
        
        export default {
         install,
         UniSwitch,
         UniSlider,
         UniNumberGrow
         // ...如果還有的話繼續添加
        }

        好了到這里我們的組件就開發完成了;下面開始說怎么打包發布到 npm 上

        發布到 npm

        打包之前,首先我們需要改一下 webpack.config.js 這個文件;

        // ... 此處省略代碼
        const NODE_ENV = process.env.NODE_ENV
        module.exports = {
         // 根據不同的執行環境配置不同的入口
         entry: NODE_ENV == 'development' ? './src/main.js' : './src/index.js',
         output: {
         // 修改打包出口,在最外級目錄打包出一個 index.js 文件,我們 import 默認會指向這個文件
         path: path.resolve(__dirname, './dist'),
         publicPath: '/dist/',
         filename: 'custom-ui.js',
         library: 'custom-ui', // 指定的就是你使用require時的模塊名
         libraryTarget: 'umd', // libraryTarget會生成不同umd的代碼,可以只是commonjs標準的,也可以是指amd標準的,也可以只是通過script標簽引入的
         umdNamedDefine: true // 會對 UMD 的構建過程中的 AMD 模塊進行命名。否則就使用匿名的 define
         },
         // ... 此處省略代碼
        }

        然后, 再修改package.json 文件:

        // 發布開源因此需要將這個字段改為 false
        "private": false,
        // 這個指 import custom-ui 的時候它會去檢索的路徑
        "main": "dist/unisoft-ui.js",

        發布命令只有兩步驟:

        npm login   // 登陸
        npm publish // 發布

        完成之后我們就可以在項目中安裝使用了

        在項目中使用unisoft-ui

        在自己的項目中使用unisoft-ui, 先從 npm 安裝

        npm install unisoft-ui -S

        在 mian.js 中引入

        import UniSoftUI from 'unisoft-ui'
        Vue.use(UniSoftUI)

        在組件中使用:

        <template>
         <div id="app">
         <h1>{{msg}}</h1>
         <uni-switch v-model="isSwitch">
         <span class="text">{{switchText}}</span>
         </uni-switch>
         </div>
        </template>
        
        <script>
         export default {
         name: 'app',
         data() {
         return {
         msg: 'welecom to unisoft-ui',
         isSwitch: false,
         }
         },
         computed: {
         switchText() {
         return this.isSwitch ? '開' : '關';
         }
         },
         }
        </script>

        注意: 在發布npm包之前要先修改 .gitignore 去掉忽略 dist, 因為我們打包的文件也需要提交;每次上到 npm 上需要更改版本號,package.json 里的 version 字段

        總結

        以上所述是小編給大家介紹的Vue 組件封裝 并使用 NPM 發布的教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue 組件封裝 并使用 NPM 發布的教程

        Vue 組件封裝 并使用 NPM 發布的教程:正文開始 Vue 開發插件 我們可以先查看Vue的插件的開發規范 我們開發的之后期望的結果是支持 import、require 或者直接使用 script 標簽的形式引入,就像這樣: ps: 這里注意一下包的名字前綴是 unisoft ,組件的名字前綴是 uni import Un
        推薦度:
        標簽: VUE 發布 封裝
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 中文字幕不卡高清免费| 亚洲精品久久久久无码AV片软件| 一区二区三区免费视频网站| 国产成人在线免费观看| 亚洲精品无码av中文字幕| 成人毛片手机版免费看| 亚洲AV综合色区无码二区偷拍 | 亚洲a级片在线观看| 久久国产乱子伦免费精品| 久久久久亚洲AV成人片| 91青青青国产在观免费影视| 亚洲国产成人精品无码区在线秒播 | 亚洲欧洲日产国码无码网站| 你懂的免费在线观看网站| 亚洲国产成人久久精品影视| 99久热只有精品视频免费看| 亚洲最大黄色网站| 成年女人18级毛片毛片免费| 色婷婷亚洲一区二区三区| 亚洲综合亚洲综合网成人| a级毛片100部免费观看| 亚洲资源在线观看| 亚洲免费综合色在线视频| 老司机亚洲精品影院在线观看| 亚洲毛片网址在线观看中文字幕| 99热在线日韩精品免费| 亚洲人成网站日本片| 免费涩涩在线视频网| 两个人的视频www免费| 亚洲欧洲精品久久| 精品国产免费观看久久久| 青青操视频在线免费观看| 亚洲一卡二卡三卡四卡无卡麻豆| 又黄又爽的视频免费看| 日韩精品无码一区二区三区免费| 亚洲综合精品成人| 亚洲国产成人一区二区三区| 大学生一级特黄的免费大片视频| 久久国产乱子伦精品免费午夜 | 日本成人免费在线| 男的把j放进女人下面视频免费|