video.js是一个优秀的视频播放器库,不过官网的示例中,是做为全局变量videojs
引入的。若是咱们的项目使用ES6风格的模块,用webpack来作打包的话,就须要作一些额外的工做。本文介绍我在使用的时候遇到的一些“坑”。css
直接从npm安装video.js,而后就能够在代码中使用video.js了。html
npm install video.js --save
import videojs from 'video.js'; videojs(document.getElementById('foo'));
可是这样使用并无引入video.js的皮肤样式文件,播放器是没有界面的。webpack
因此还须要引入CSS文件:git
import 'video.js/dist/video-js.css';
另外须要注意的是,由于CSS中使用了图标字体,还须要用webpack的file-loader
处理字体文件。在webpack配置文件中添加这样的loader配置:github
{ test: /\.(ttf|eot|svg|woff(2))(\?[a-z0-9]+)?$/, loader: 'file', }
对于一些HTML5播放器播放不了的格式,video.js回调用Flash播放器去播放器,这样就须要引入一个SWF文件。方法仍是用file-loader
。在以前的配置中加上swf
扩展名:web
{ test: /\.(swf|ttf|eot|svg|woff(2))(\?[a-z0-9]+)?$/, loader: 'file', }
而后在代码中配置SWF文件的路径:npm
import SWF_PATH from 'video.js/dist/video-js.swf'; videojs.options.flash.swf = SWF_PATH;
若是使用Flash播放器,video.js还会异步请求一个vtt.js
文件。这个是用来处理WebVTT文件的。异步
这个JS文件的路径的配置方法跟上面的SWF文件的配置方法是相似的。可是,webpack默认会对JS文件打包,而咱们须要的是经过file-loader
来引入这个JS文件,从而得到其形对路径,因此要在import语句中指定具体的loader:ide
import VTTJS_PATH from 'file!videojs-vtt.js/dist/vtt.min.js'; videojs.options['vtt.js'] = VTTJS_PATH;
video.js包含了不少种语言的本地化,可是没有包含在库中,须要咱们本身加载:svg
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
这个全局变量。所以若是直接引入也会报错。解决方法跟上一部分“引入其余语言翻译”的方法同样,在此不赘述。