成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

發(fā)布自己第一個(gè)npm 組件包(基于Vue的文字跑馬燈組件)

KitorinZero / 3288人閱讀

摘要:所以我把這個(gè)為了區(qū)分這個(gè)組件包是水平方向的,改名為三基于的文字跑馬燈組件大致了解怎么發(fā)組件包以后,我們?cè)賮?lái)看看需要發(fā)布出去的組件包怎么寫(xiě)的。

一、前言

總結(jié)下最近工作上在移動(dòng)端實(shí)現(xiàn)的一個(gè)跑馬燈效果,最終效果如下:

印象中好像HTML標(biāo)簽的‘marquee’的直接可以實(shí)現(xiàn)這個(gè)效果,不過(guò) HTML標(biāo)準(zhǔn)中已經(jīng)廢棄了‘marquee’標(biāo)簽
既然HTML標(biāo)準(zhǔn)已經(jīng)廢棄了這個(gè)標(biāo)簽,現(xiàn)在工作上用的是Vue,所以想著能不能自己也發(fā)布一個(gè)基于Vue的文字跑馬燈組件包,這樣別人可以通過(guò)npm install ...就可以用,想想還有點(diǎn)激動(dòng),于是開(kāi)始我的第一個(gè)npm組件之旅!

二、用npm發(fā)布一個(gè)包

有點(diǎn)慚愧,之前通過(guò)npm install ...安裝package包時(shí),我是不知道package包存在哪里,在github上?折騰一番才知道是在npm上發(fā)布的。

2.1 npm發(fā)布包流程

進(jìn)入官網(wǎng),注冊(cè)帳號(hào)

進(jìn)入已經(jīng)寫(xiě)好的組件, 登錄npm帳號(hào)

執(zhí)行npm publish,最先遇到問(wèn)題好像是這個(gè)

這里注意的是因?yàn)閲?guó)內(nèi)網(wǎng)絡(luò)問(wèn)題,許多小伙伴把npm的鏡像代理到淘寶或者別的地方了,這里要設(shè)置回原來(lái)的鏡像。npm config set registry=http://registry.npmjs.org

后面又遇到

這里我還特意查了下ENEEDAUTH錯(cuò)誤,可是卻沒(méi)看后面的提示:You need to authorize this machine using "npm adduser"
所以這里需要npm adduser

(發(fā)布的包的名字也要注意,有可能會(huì)有重名問(wèn)題,像我這個(gè)組件包本來(lái)取名為vue-marquee,后面在npm上搜到已經(jīng)有這個(gè)包了,不過(guò)他做的是垂直方向的跑馬燈。所以我把這個(gè)為了區(qū)分這個(gè)組件包是水平方向的,改名為vue-marquee-ho)

三、基于Vue的文字跑馬燈組件

大致了解怎么發(fā)組件包以后,我們?cè)賮?lái)看看需要發(fā)布出去的組件包怎么寫(xiě)的。

3.1初始化組件

這里我還是用到vue-cli,雖然有很多東西不需要,因?yàn)閷?duì)這個(gè)比較熟悉,所以還是按照這個(gè)步驟來(lái),初始化該組件

vue init webpack vue-marquee-ho
cd vue-marquee-ho
cnpm install // 安裝依賴包
npm run dev // 啟動(dòng)服務(wù)
3.2修改配置文件

首先看package.json

  "name": "vue-marquee-ho",
  "version": "1.2.1",
  "description": "A Vue component to marquee",
  "author": "wangjuan",
  "private": false,
  "license": "MIT",
  "main": "dist/vue-marquee.min.js",
  "scripts": {
    "dev": "node build/dev-server.js",
    "start": "node build/dev-server.js",
    "build": "node build/build.js",
    "test": "node build/test.js"
  },
  "dependencies": {
    "vue": "^2.2.6"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/wj704/vue-marquee-ho.git"
  },

因?yàn)檫@個(gè)組件包是能公用的,所以"private": false,
然后 "main": "dist/vue-marquee.min.js", 這里的配置意思是,別人用這個(gè)包 import VueMarquee from "vue-marquee-ho"; 時(shí),引入的文件。
可以看出,這個(gè)vue-marquee-ho最終需要打包出一個(gè)js文件,所以我們需要修改webpack.prod.config.js文件

var webpackConfig = merge(baseWebpackConfig, {
  module: {
    rules: utils.styleLoaders({
      sourceMap: config.build.productionSourceMap,
      extract: true
    })
  },
  devtool: config.build.productionSourceMap ? "#source-map" : false,
  // output: {
  //   path: config.build.assetsRoot,
  //   filename: utils.assetsPath("js/[name].[chunkhash].js"),
  //   chunkFilename: utils.assetsPath("js/[id].[chunkhash].js")
  // },
   output: {
    path: config.bundle.assetsRoot,
    publicPath: config.bundle.assetsPublicPath,
    filename: "vue-marquee.min.js",
    library: "VueMarquee",
    libraryTarget: "umd"
  },
  plugins: [
    // http://vuejs.github.io/vue-loader/en/workflow/production.html
    new webpack.DefinePlugin({
      "process.env": env
    }),
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      },
      sourceMap: true
    }),
    // extract css into its own file
    new ExtractTextPlugin({
      // filename: utils.assetsPath("css/[name].[contenthash].css")
       filename: "vue-marquee.min.css"
    }),
    new OptimizeCSSPlugin()
  ]
})
module.exports = webpackConfig

可以看到我的output輸出配置改了下,然后有很多webpack.prod.config.js之前不需要的代碼去掉了,再看下對(duì)應(yīng)的config配置,文件是config/index.js

bundle: {
    env: require("./prod.env"),
    assetsRoot: path.resolve(__dirname, "../dist"),
    assetsPublicPath: "/",
    assetsSubDirectory: "/",
    productionSourceMap: true,
    productionGzip: false,
    productionGzipExtensions: ["js", "css"],
    bundleAnalyzerReport: process.env.npm_config_report
  },

至此配置差不多修改好了。接下來(lái)我們看看實(shí)現(xiàn)關(guān)鍵功能的Marquee組件

3.3 Marquee組件

思路:標(biāo)簽里的文字所占的寬度超過(guò)外面的div寬度時(shí),增加一個(gè)內(nèi)容相同的標(biāo)簽。這里span標(biāo)簽設(shè)置為display: inline-block;,可以計(jì)算其寬度,把span標(biāo)簽外面的父元素設(shè)置為font-size: 0;display: inline-block;,父級(jí)元素的寬度即為兩者寬度之和,也就是一個(gè)span標(biāo)簽寬度的兩倍,然后將其父級(jí)元素通過(guò)CSS3動(dòng)畫(huà)設(shè)置:

@keyframes marquee {
    0%  { transform: translateX(0); }
    100% { transform: translateX(-50%);}
}

即可完美實(shí)現(xiàn)跑馬燈效果。
具體代碼:

js:


css:


我們知道 webpack.base.conf.js 中入口文件默認(rèn)指定為:

entry: {
    app: "./src/main.js"
  },

所以,我們只需要將main.js引入Marquee.vue組件就可以。有兩種方式引入:

import VueMarquee from "./Marquee.vue"
export default VueMarquee;

// var VueMarquee = require("./Marquee.vue");
// module.exports = VueMarquee

注意import 和module.exports不要一起用,github看到其他人提交的組件是這兩個(gè)一起用的,這樣在windows下會(huì)報(bào)錯(cuò),好像mac不會(huì)有問(wèn)題。

3.4 打包生成dist/vue-marquee.min.js

通過(guò)npm run build 即可看到目錄下生成了dist文件,dist文件里有四個(gè)文件,分別是:

vue-marquee.min.js
vue-marquee.min.js.map
vue-marquee.min.css
vue-marquee.min.css.map

我們知道有一個(gè)這樣的文件.gitignore,里面包含npm install時(shí),不會(huì)安裝的東西,因?yàn)檫@里要用到dist文件,于是我把.gitignore 里的dist/去掉了。

.DS_Store
node_modules/

npm-debug.log*
yarn-debug.log*
yarn-error.log*

打包好了后,通過(guò)npm publish 提交到npm上

需要多次提交時(shí)注意修改package.json中的"version": "1.2.1", 我這里已經(jīng)提交了21次了(捂臉哭(┬_┬))

四、使用組件

通過(guò)npm install vue-marquee-ho -s 安裝到相應(yīng)的項(xiàng)目下,安裝成功如下圖所示:

到項(xiàng)目中的node_modules/目錄下將可以看到:

需要用到該組件時(shí)可以這樣引入(注意引入樣式)

import VueMarquee from "vue-marquee-ho";
import Css from "vue-marquee-ho/dist/vue-marquee.min.css"
export default {
  name: "app",
  components:{
      "vue-marquee": VueMarquee
    },
}

看一個(gè)demo:



效果:

五、總結(jié)

總算發(fā)布出去,能正常使用了!花了挺多時(shí)間的,雖然這個(gè)組件思路比較簡(jiǎn)單,但是說(shuō)不定別人能用上呢。這個(gè)組件的雛形代碼比現(xiàn)在多,不過(guò)之前在項(xiàng)目中直接引用也能正常使用。但是把他打包發(fā)布出去再使用的過(guò)程,出了很多問(wèn)題,反復(fù)修改代碼,精簡(jiǎn)代碼,最終終于成功了!21次的提交記錄,不容易呀,源代碼地址:

vue-marquee-ho

希望能得到大家的star ^_^

參考資料:
1、http://www.jianshu.com/p/36d3...
2、http://www.cnblogs.com/maryme...
3、http://blog.csdn.net/gamesdev...
4、https://segmentfault.com/a/11...
5、https://stackoverflow.com/que...
6、http://www.mamicode.com/info-...
7、http://blog.csdn.net/crper/ar... (雖然調(diào)試技巧我還是沒(méi)學(xué)會(huì)(????))
8、https://github.com/xiaokaike/...
9、https://github.com/li-xianfen...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/50810.html

相關(guān)文章

  • 發(fā)布自己一個(gè)npm 組件基于Vue文字馬燈組件

    摘要:所以我把這個(gè)為了區(qū)分這個(gè)組件包是水平方向的,改名為三基于的文字跑馬燈組件大致了解怎么發(fā)組件包以后,我們?cè)賮?lái)看看需要發(fā)布出去的組件包怎么寫(xiě)的。 一、前言 總結(jié)下最近工作上在移動(dòng)端實(shí)現(xiàn)的一個(gè)跑馬燈效果,最終效果如下: showImg(https://segmentfault.com/img/remote/1460000009540502?w=555&h=380); 印象中好像HTML標(biāo)簽的...

    edagarli 評(píng)論0 收藏0
  • 支持多框架組件庫(kù)KPC 1.0正式發(fā)布

    摘要:自從年月份對(duì)外公布以來(lái),已經(jīng)經(jīng)過(guò)了個(gè)月的迭代,期間發(fā)布了幾十個(gè)正式版本,但一直沒(méi)有到,因?yàn)槲覀冇X(jué)得是個(gè)里程碑版本,我們必須做的足夠完善才敢稱之為。 自從17年11月份對(duì)外公布以來(lái),KPC已經(jīng)經(jīng)過(guò)了8個(gè)月的迭代,期間發(fā)布了幾十個(gè)正式版本,但一直沒(méi)有到1.0,因?yàn)槲覀冇X(jué)得1.0是個(gè)里程碑版本,我們必須做的足夠完善才敢稱之為1.0。而如今我們有信心對(duì)外宣布:KPC 1.0終于來(lái)了! 其實(shí)距離...

    劉厚水 評(píng)論0 收藏0
  • 制作并發(fā)布一個(gè)vue組件npm

    摘要:發(fā)布到注冊(cè)進(jìn)入官網(wǎng),注冊(cè)帳號(hào)登錄并發(fā)布提示報(bào)錯(cuò)是因?yàn)樽?cè)完后沒(méi)有進(jìn)行郵箱驗(yàn)證,驗(yàn)證完成即可發(fā)布成功參考文獻(xiàn)如何制作并發(fā)布一個(gè)的組件的包發(fā)布自己第一個(gè)組件包基于的文字跑馬燈組件 最近在網(wǎng)上找到一個(gè) 網(wǎng)頁(yè)制作輔助工具-jQuery標(biāo)尺參考線插件 ,覺(jué)得在現(xiàn)在的一個(gè)項(xiàng)目中能用的上,插件是基于JQuery的,但是現(xiàn)在的項(xiàng)目是用vue寫(xiě)的。So...,就照葫蘆畫(huà)瓢改裝成了Vue組件,總的來(lái)說(shuō)算是...

    bawn 評(píng)論0 收藏0
  • 一個(gè)基于vue圖片輪播組件實(shí)現(xiàn)

    摘要:在線首先是一張思維導(dǎo)圖然后是以上屬性的標(biāo)注說(shuō)明代碼層除去可從父組件接收的屬性,組件自身有以下屬性當(dāng)前顯示的圖片列表鼠標(biāo)是否懸浮在組件上自動(dòng)切換的每項(xiàng)元素的寬度是否是反向切換,觸發(fā)時(shí),該屬性為組件掛載之前計(jì)算每項(xiàng)元素的寬度,即的值初始化顯示 1. 在線DEMO http://va-carousel.xiaoshang.online Github 2. 首先是一張思維導(dǎo)圖 showImg(...

    DevTalking 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<