video.js
Зеркало из https://github.com/videojs/video.js
/
rollup.config.js
375 строк · 8.3 Кб
1import path from 'path';2import fs from 'fs';3import babel from 'rollup-plugin-babel';4import resolve from 'rollup-plugin-node-resolve';5import commonjs from 'rollup-plugin-commonjs';6import json from 'rollup-plugin-json';7import progressPlugin from 'rollup-plugin-progress';8import ignore from 'rollup-plugin-ignore';9import alias from 'rollup-plugin-alias';10import _ from 'lodash';11import pkg from './package.json';12import multiEntry from 'rollup-plugin-multi-entry';13import stub from 'rollup-plugin-stub';14import isCI from 'is-ci';15import replace from '@rollup/plugin-replace';16import image from '@rollup/plugin-image';17import istanbul from 'rollup-plugin-istanbul';18import externalGlobals from 'rollup-plugin-external-globals';19import svg from 'rollup-plugin-svg';20import excludeLines from './build/rollup-exclude-lines';21
22const excludeCoverage = [23'test/**',24'node_modules/**',25'package.json',26/^data-files!/27];28
29const CI_TEST_TYPE = process.env.CI_TEST_TYPE || '';30const compiledLicense = _.template(fs.readFileSync('./build/license-header.txt', 'utf8'));31const bannerData = _.pick(pkg, ['version', 'copyright']);32const banner = compiledLicense(Object.assign({includesVtt: true}, bannerData));33
34const watch = {35clearScreen: false36};37
38const onwarn = (warning) => {39// ignore unknown option for --no-progress40if (warning.code === 'UNKNOWN_OPTION' && warning.message.indexOf('progress') !== -1) {41return;42}43
44// eslint-disable-next-line no-console45console.warn(warning.message);46};47
48const primedIgnore = ignore(['videojs-vtt.js']);49const primedResolve = resolve({50mainFields: ['jsnext:main', 'module', 'main'],51browser: true52});53const primedCjs = commonjs({54sourceMap: false55});56const primedBabel = babel({57runtimeHelpers: true,58babelrc: false,59exclude: 'node_modules/**(!http-streaming)',60compact: false,61presets: [62['@babel/preset-env', {63targets: [64'last 3 major versions',65'Firefox ESR',66// This ensures support for certain smart TVs (ex. LG WebOS 4)67'Chrome >= 53',68'not dead',69'not ie 11',70'not baidu 7',71'not and_qq 11',72'not and_uc 12',73'not op_mini all'74],75bugfixes: true,76loose: true,77modules: false78}]79],80plugins: [81['@babel/plugin-transform-runtime', {regenerator: false}]82]83});84const primedExternalGlobals = externalGlobals({85'global': 'window',86'global/window': 'window',87'global/document': 'document'88});89
90const progress = () => {91if (isCI) {92return {};93}94
95return progressPlugin();96};97
98const globals = {99browser: {100},101module: {102},103test: {104qunit: 'QUnit',105qunitjs: 'QUnit',106sinon: 'sinon'107}108};109
110const moduleExternals = [111'global',112'@videojs/xhr',113'safe-json-parse',114'videojs-vtt.js',115'url-toolkit',116'm3u8-parser',117'mpd-parser',118'mux.js',119'aes-decrypter',120'keycode',121'@babel/runtime'122];123const externals = {124browser: [],125module(id) {126const result = moduleExternals.some((ext) => id.indexOf(ext) !== -1);127
128return result;129},130test: Object.keys(globals.test).concat([131])132};133
134export default cliargs => [135// standard umd file136{137input: 'src/js/index.js',138output: {139format: 'umd',140file: 'dist/video.js',141name: 'videojs',142banner,143globals: globals.browser144},145external: externals.browser,146plugins: [147excludeLines({148include: 'src/js/**'149}),150alias({151'video.js': path.resolve(__dirname, './src/js/video.js')152}),153primedResolve,154json(),155primedExternalGlobals,156primedCjs,157primedBabel,158svg(),159cliargs.progress !== false ? progress() : {}160],161onwarn,162watch
163},164// debug umd file165{166input: 'src/js/debug.js',167output: {168format: 'umd',169file: 'dist/alt/video.debug.js',170name: 'videojs',171banner,172globals: globals.browser173},174external: externals.browser,175plugins: [176excludeLines({177include: 'src/js/**'178}),179alias({180'video.js': path.resolve(__dirname, './src/js/video.js')181}),182primedResolve,183json(),184primedExternalGlobals,185primedCjs,186primedBabel,187svg(),188cliargs.progress !== false ? progress() : {}189],190onwarn,191watch
192},193{194input: 'test/unit/**/*.test.js',195output: {196format: 'iife',197name: 'videojsTests',198file: 'test/dist/bundle.js',199globals: globals.test200},201external: externals.test,202plugins: [203excludeLines({204include: 'src/js/**'205}),206multiEntry({exports: false}),207alias({208'video.js': path.resolve(__dirname, './src/js/video.js')209}),210primedResolve,211json(),212stub(),213primedCjs,214CI_TEST_TYPE === 'coverage' ? istanbul({exclude: excludeCoverage}) : {},215primedBabel,216image(),217cliargs.progress !== false ? progress() : {}218
219],220onwarn,221watch
222},223// es, cjs224{225input: 'src/js/index.js',226output: [227{228format: 'es',229file: 'dist/video.es.js',230banner,231globals: globals.module232}, {233format: 'cjs',234file: 'dist/video.cjs.js',235banner,236globals: globals.module237}238],239external: externals.module,240plugins: [241excludeLines({242include: 'src/js/**'243}),244alias({245'video.js': path.resolve(__dirname, './src/js/video.js'),246'videojs-contrib-quality-levels': path.resolve(__dirname, './node_modules/videojs-contrib-quality-levels/dist/videojs-contrib-quality-levels.es.js'),247'@videojs/http-streaming': path.resolve(__dirname, './node_modules/@videojs/http-streaming/dist/videojs-http-streaming.es.js')248}),249replace({250// single quote replace251"require('@videojs/vhs-utils/es": "require('@videojs/vhs-utils/cjs",252// double quote replace253'require("@videojs/vhs-utils/es': 'require("@videojs/vhs-utils/cjs'254}),255json(),256primedBabel,257svg(),258cliargs.progress !== false ? progress() : {}259],260onwarn,261watch
262},263// novtt umd264{265input: 'src/js/index.js',266output: {267format: 'umd',268file: 'dist/alt/video.novtt.js',269name: 'videojs',270banner: compiledLicense(Object.assign({includesVtt: true}, bannerData)),271globals: globals.browser272},273external: externals.browser,274plugins: [275primedIgnore,276excludeLines({277include: 'src/js/**'278}),279alias({280'video.js': path.resolve(__dirname, './src/js/video.js')281}),282primedResolve,283json(),284primedExternalGlobals,285primedCjs,286primedBabel,287svg(),288cliargs.progress !== false ? progress() : {}289],290onwarn,291watch
292},293// core cjs, es294{295input: 'src/js/video.js',296output: [297{298format: 'es',299file: 'core.es.js',300banner,301globals: globals.module302}, {303format: 'cjs',304file: 'core.js',305banner,306globals: globals.module307}308],309external: externals.module,310plugins: [311excludeLines({312include: 'src/js/**'313}),314json(),315primedBabel,316svg(),317cliargs.progress !== false ? progress() : {}318],319onwarn,320watch
321},322// core umd323{324input: 'src/js/video.js',325output: {326format: 'umd',327name: 'videojs',328file: 'dist/alt/video.core.js',329banner,330globals: globals.browser331},332external: externals.browser,333plugins: [334primedResolve,335excludeLines({336include: 'src/js/**'337}),338json(),339primedExternalGlobals,340primedCjs,341primedBabel,342svg(),343cliargs.progress !== false ? progress() : {}344],345onwarn,346watch
347},348// core novtt umd349{350input: 'src/js/video.js',351output: {352format: 'umd',353name: 'videojs',354file: 'dist/alt/video.core.novtt.js',355banner: compiledLicense(Object.assign({includesVtt: true}, bannerData)),356globals: globals.browser357},358external: externals.browser,359plugins: [360primedIgnore,361primedResolve,362excludeLines({363include: 'src/js/**'364}),365json(),366primedExternalGlobals,367primedCjs,368primedBabel,369svg(),370cliargs.progress !== false ? progress() : {}371],372onwarn,373watch
374}375];376