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
這個全局變量。所以若是直接引入也會報錯。解決方法跟上一部分「引入其餘語言翻譯」的方法同樣,在此不贅述。