资讯专栏INFORMATION COLUMN

webpack与video.js一同使用的一些坑

MorePainMoreGain / 1205人阅读

摘要:是一个优秀的视频播放器库,不过官网的示例中,是作为全局变量引入的。如果我们的项目使用风格的模块,用来做打包的话,就需要做一些额外的工作。本文介绍我在使用的时候遇到的一些坑。这个是用来处理文件的。第二种方法是使用,直接把全局变量暴露出来。

video.js是一个优秀的视频播放器库,不过官网的示例中,是作为全局变量videojs引入的。如果我们的项目使用ES6风格的模块,用webpack来做打包的话,就需要做一些额外的工作。本文介绍我在使用的时候遇到的一些“坑”。

基本使用方法

直接从npm安装video.js,然后就可以在代码中使用video.js了。

npm install video.js --save
import videojs from "video.js";

videojs(document.getElementById("foo"));
引入默认皮肤样式

但是这样使用并没有引入video.js的皮肤样式文件,播放器是没有界面的。

所以还需要引入CSS文件:

import "video.js/dist/video-js.css";

另外需要注意的是,因为CSS中使用了图标字体,还需要用webpack的file-loader处理字体文件。在webpack配置文件中添加这样的loader配置:

{
  test: /.(ttf|eot|svg|woff(2))(?[a-z0-9]+)?$/,
  loader: "file",
}
引入Flash播放器的SWF文件

对于一些HTML5播放器播放不了的格式,video.js回调用Flash播放器去播放器,这样就需要引入一个SWF文件。方法还是用file-loader。在之前的配置中加上swf扩展名:

{
  test: /.(swf|ttf|eot|svg|woff(2))(?[a-z0-9]+)?$/,
  loader: "file",
}

然后在代码中配置SWF文件的路径:

import SWF_PATH from "video.js/dist/video-js.swf";

videojs.options.flash.swf = SWF_PATH;
引入vtt.js

如果使用Flash播放器,video.js还会异步请求一个vtt.js文件。这个是用来处理WebVTT文件的。

这个JS文件的路径的配置方法跟上面的SWF文件的配置方法是类似的。但是,webpack默认会对JS文件打包,而我们需要的是通过file-loader来引入这个JS文件,从而获得其形对路径,所以要在import语句中指定具体的loader:

import VTTJS_PATH from "file!videojs-vtt.js/dist/vtt.min.js";

videojs.options["vtt.js"] = VTTJS_PATH;
引入其他语言翻译

video.js包含了很多种语言的本地化,但是没有包含在库中,需要我们自己加载:

import "video.js/dist/lang/zh-CN";

这样加载的问题是,本地化JS代码中使用了videojs这个全局变量,但是webpack并没有将其暴露,所以运行会报错。

解决这个问题有两种方法,在webpack的文档有所提及。

第一种方法是使用imports-loader,在import一个JS的时候,注入一个全局变量:

import "imports?videojs=video.js!video.js/dist/lang/zh-CN"

这样的语句,就是告诉webpack,将videojs这个全局变量指向video.js这个模块。这样就不会报错。

第二种方法是使用ProvidePlugin,直接把全局变量暴露出来。

在webpack的配置文件中,增加这样的plugin配置:

new webpack.ProvidePlugin({
  videojs: "video.js",
}),

这样就表示把video.js模块暴露为全局变量videojs

使用插件

video.js有很多插件,他们一般也会使用videojs这个全局变量。因此如果直接引入也会报错。解决方法跟上一部分“引入其他语言翻译”的方法一样,在此不赘述。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81044.html

相关文章

  • 基于 Node+express 爬虫数据 API,爬一套自己api数据(2)

    摘要:目前半岛局势紧张,朝鲜已进行了六次核试验,被广泛认为已经拥有了核弹头。另外朝鲜的导弹技术今年以来快速突破,成功试射了射程可覆盖美国本土的洲际弹道导弹。这个版的内容传到互联网上后,迅速刷屏,引起纷纷议论。 SplderApi2 Node-SplderApi2 第二版 基于Node 的网络爬虫 API接口 包括前端开发日报、kugou音乐、前端top框架排行、妹纸福利、搞笑视频、段子笑话、...

    beanlam 评论0 收藏0
  • 记录一波video.js使用及问题

    摘要:最近的项目中需要播放视频,鉴于元素的一些坑及不想自己造轮子,于是就找到了端播放视频使用量最多的插件,是国外开发者开发的,英语本身就不好的我看英文文档简直是折磨,国内又没有中文文档,能搜的到的基本是简单的使用及最基本的的介绍,想要实现一些自定 最近的项目中需要播放视频,鉴于html5元素的一些坑及不想自己造轮子,于是就找到了web端播放视频使用量最多的插件video.js,video.j...

    crossoverJie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<