video.js

Зеркало из https://github.com/videojs/video.js
Форк
0
/
rollup.config.js 
375 строк · 8.3 Кб
1
import path from 'path';
2
import fs from 'fs';
3
import babel from 'rollup-plugin-babel';
4
import resolve from 'rollup-plugin-node-resolve';
5
import commonjs from 'rollup-plugin-commonjs';
6
import json from 'rollup-plugin-json';
7
import progressPlugin from 'rollup-plugin-progress';
8
import ignore from 'rollup-plugin-ignore';
9
import alias from 'rollup-plugin-alias';
10
import _ from 'lodash';
11
import pkg from './package.json';
12
import multiEntry from 'rollup-plugin-multi-entry';
13
import stub from 'rollup-plugin-stub';
14
import isCI from 'is-ci';
15
import replace from '@rollup/plugin-replace';
16
import image from '@rollup/plugin-image';
17
import istanbul from 'rollup-plugin-istanbul';
18
import externalGlobals from 'rollup-plugin-external-globals';
19
import svg from 'rollup-plugin-svg';
20
import excludeLines from './build/rollup-exclude-lines';
21

22
const excludeCoverage = [
23
  'test/**',
24
  'node_modules/**',
25
  'package.json',
26
  /^data-files!/
27
];
28

29
const CI_TEST_TYPE = process.env.CI_TEST_TYPE || '';
30
const compiledLicense = _.template(fs.readFileSync('./build/license-header.txt', 'utf8'));
31
const bannerData = _.pick(pkg, ['version', 'copyright']);
32
const banner = compiledLicense(Object.assign({includesVtt: true}, bannerData));
33

34
const watch = {
35
  clearScreen: false
36
};
37

38
const onwarn = (warning) => {
39
  // ignore unknown option for --no-progress
40
  if (warning.code === 'UNKNOWN_OPTION' && warning.message.indexOf('progress') !== -1) {
41
    return;
42
  }
43

44
  // eslint-disable-next-line no-console
45
  console.warn(warning.message);
46
};
47

48
const primedIgnore = ignore(['videojs-vtt.js']);
49
const primedResolve = resolve({
50
  mainFields: ['jsnext:main', 'module', 'main'],
51
  browser: true
52
});
53
const primedCjs = commonjs({
54
  sourceMap: false
55
});
56
const primedBabel = babel({
57
  runtimeHelpers: true,
58
  babelrc: false,
59
  exclude: 'node_modules/**(!http-streaming)',
60
  compact: false,
61
  presets: [
62
    ['@babel/preset-env', {
63
      targets: [
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
      ],
75
      bugfixes: true,
76
      loose: true,
77
      modules: false
78
    }]
79
  ],
80
  plugins: [
81
    ['@babel/plugin-transform-runtime', {regenerator: false}]
82
  ]
83
});
84
const primedExternalGlobals = externalGlobals({
85
  'global': 'window',
86
  'global/window': 'window',
87
  'global/document': 'document'
88
});
89

90
const progress = () => {
91
  if (isCI) {
92
    return {};
93
  }
94

95
  return progressPlugin();
96
};
97

98
const globals = {
99
  browser: {
100
  },
101
  module: {
102
  },
103
  test: {
104
    qunit: 'QUnit',
105
    qunitjs: 'QUnit',
106
    sinon: 'sinon'
107
  }
108
};
109

110
const 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
];
123
const externals = {
124
  browser: [],
125
  module(id) {
126
    const result = moduleExternals.some((ext) => id.indexOf(ext) !== -1);
127

128
    return result;
129
  },
130
  test: Object.keys(globals.test).concat([
131
  ])
132
};
133

134
export default cliargs => [
135
  // standard umd file
136
  {
137
    input: 'src/js/index.js',
138
    output: {
139
      format: 'umd',
140
      file: 'dist/video.js',
141
      name: 'videojs',
142
      banner,
143
      globals: globals.browser
144
    },
145
    external: externals.browser,
146
    plugins: [
147
      excludeLines({
148
        include: 'src/js/**'
149
      }),
150
      alias({
151
        'video.js': path.resolve(__dirname, './src/js/video.js')
152
      }),
153
      primedResolve,
154
      json(),
155
      primedExternalGlobals,
156
      primedCjs,
157
      primedBabel,
158
      svg(),
159
      cliargs.progress !== false ? progress() : {}
160
    ],
161
    onwarn,
162
    watch
163
  },
164
  // debug umd file
165
  {
166
    input: 'src/js/debug.js',
167
    output: {
168
      format: 'umd',
169
      file: 'dist/alt/video.debug.js',
170
      name: 'videojs',
171
      banner,
172
      globals: globals.browser
173
    },
174
    external: externals.browser,
175
    plugins: [
176
      excludeLines({
177
        include: 'src/js/**'
178
      }),
179
      alias({
180
        'video.js': path.resolve(__dirname, './src/js/video.js')
181
      }),
182
      primedResolve,
183
      json(),
184
      primedExternalGlobals,
185
      primedCjs,
186
      primedBabel,
187
      svg(),
188
      cliargs.progress !== false ? progress() : {}
189
    ],
190
    onwarn,
191
    watch
192
  },
193
  {
194
    input: 'test/unit/**/*.test.js',
195
    output: {
196
      format: 'iife',
197
      name: 'videojsTests',
198
      file: 'test/dist/bundle.js',
199
      globals: globals.test
200
    },
201
    external: externals.test,
202
    plugins: [
203
      excludeLines({
204
        include: 'src/js/**'
205
      }),
206
      multiEntry({exports: false}),
207
      alias({
208
        'video.js': path.resolve(__dirname, './src/js/video.js')
209
      }),
210
      primedResolve,
211
      json(),
212
      stub(),
213
      primedCjs,
214
      CI_TEST_TYPE === 'coverage' ? istanbul({exclude: excludeCoverage}) : {},
215
      primedBabel,
216
      image(),
217
      cliargs.progress !== false ? progress() : {}
218

219
    ],
220
    onwarn,
221
    watch
222
  },
223
  // es, cjs
224
  {
225
    input: 'src/js/index.js',
226
    output: [
227
      {
228
        format: 'es',
229
        file: 'dist/video.es.js',
230
        banner,
231
        globals: globals.module
232
      }, {
233
        format: 'cjs',
234
        file: 'dist/video.cjs.js',
235
        banner,
236
        globals: globals.module
237
      }
238
    ],
239
    external: externals.module,
240
    plugins: [
241
      excludeLines({
242
        include: 'src/js/**'
243
      }),
244
      alias({
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
      }),
249
      replace({
250
        // single quote replace
251
        "require('@videojs/vhs-utils/es": "require('@videojs/vhs-utils/cjs",
252
        // double quote replace
253
        'require("@videojs/vhs-utils/es': 'require("@videojs/vhs-utils/cjs'
254
      }),
255
      json(),
256
      primedBabel,
257
      svg(),
258
      cliargs.progress !== false ? progress() : {}
259
    ],
260
    onwarn,
261
    watch
262
  },
263
  // novtt umd
264
  {
265
    input: 'src/js/index.js',
266
    output: {
267
      format: 'umd',
268
      file: 'dist/alt/video.novtt.js',
269
      name: 'videojs',
270
      banner: compiledLicense(Object.assign({includesVtt: true}, bannerData)),
271
      globals: globals.browser
272
    },
273
    external: externals.browser,
274
    plugins: [
275
      primedIgnore,
276
      excludeLines({
277
        include: 'src/js/**'
278
      }),
279
      alias({
280
        'video.js': path.resolve(__dirname, './src/js/video.js')
281
      }),
282
      primedResolve,
283
      json(),
284
      primedExternalGlobals,
285
      primedCjs,
286
      primedBabel,
287
      svg(),
288
      cliargs.progress !== false ? progress() : {}
289
    ],
290
    onwarn,
291
    watch
292
  },
293
  // core cjs, es
294
  {
295
    input: 'src/js/video.js',
296
    output: [
297
      {
298
        format: 'es',
299
        file: 'core.es.js',
300
        banner,
301
        globals: globals.module
302
      }, {
303
        format: 'cjs',
304
        file: 'core.js',
305
        banner,
306
        globals: globals.module
307
      }
308
    ],
309
    external: externals.module,
310
    plugins: [
311
      excludeLines({
312
        include: 'src/js/**'
313
      }),
314
      json(),
315
      primedBabel,
316
      svg(),
317
      cliargs.progress !== false ? progress() : {}
318
    ],
319
    onwarn,
320
    watch
321
  },
322
  // core umd
323
  {
324
    input: 'src/js/video.js',
325
    output: {
326
      format: 'umd',
327
      name: 'videojs',
328
      file: 'dist/alt/video.core.js',
329
      banner,
330
      globals: globals.browser
331
    },
332
    external: externals.browser,
333
    plugins: [
334
      primedResolve,
335
      excludeLines({
336
        include: 'src/js/**'
337
      }),
338
      json(),
339
      primedExternalGlobals,
340
      primedCjs,
341
      primedBabel,
342
      svg(),
343
      cliargs.progress !== false ? progress() : {}
344
    ],
345
    onwarn,
346
    watch
347
  },
348
  // core novtt umd
349
  {
350
    input: 'src/js/video.js',
351
    output: {
352
      format: 'umd',
353
      name: 'videojs',
354
      file: 'dist/alt/video.core.novtt.js',
355
      banner: compiledLicense(Object.assign({includesVtt: true}, bannerData)),
356
      globals: globals.browser
357
    },
358
    external: externals.browser,
359
    plugins: [
360
      primedIgnore,
361
      primedResolve,
362
      excludeLines({
363
        include: 'src/js/**'
364
      }),
365
      json(),
366
      primedExternalGlobals,
367
      primedCjs,
368
      primedBabel,
369
      svg(),
370
      cliargs.progress !== false ? progress() : {}
371
    ],
372
    onwarn,
373
    watch
374
  }
375
];
376

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.