xgplayer/scripts/rollup.base.js
2023-04-07 18:59:15 +08:00

105 lines
3.0 KiB
JavaScript

import path from 'path'
import fs from 'fs'
import scss from 'rollup-plugin-scss'
import postcss from 'postcss'
import autoprefixer from 'autoprefixer'
import nodeResolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import svg from 'rollup-plugin-svg-import'
import replace from '@rollup/plugin-replace'
import json from '@rollup/plugin-json'
import alias from '@rollup/plugin-alias'
import webWorkerLoader from 'rollup-plugin-web-worker-loader'
import { babel } from '@rollup/plugin-babel'
const packagesDir = path.resolve(__dirname, '../packages')
const entries = fs.readdirSync(packagesDir).reduce((p, c) => (p[c] = path.resolve(packagesDir, c, 'src/index.js'), p), {})
export function commonPlugins (pkgInfo) {
return [
alias({ entries }),
nodeResolve(),
commonjs(),
json(),
svg(),
replace({
__VERSION__: `"${pkgInfo.version}"`,
__DEV__: process.env.IS_DEVELOPMENT === 'true',
preventAssignment: true
}),
webWorkerLoader({
targetPlatform: 'browser',
external: []
}),
babel({
exclude: [/core-js/, /worker\.js/, /hevc-worker\.js/, /hevc-worker-thread\.js/],
babelHelpers: 'runtime'
})
]
}
export function createCssConfig (input, output, pkgDir) {
const config = {
input,
plugins: [
scss({
output,
processor: () => postcss([autoprefixer()]),
includePaths: [
path.resolve(__dirname, '../node_modules')
],
// watch mode
outputStyle: pkgDir ? undefined : 'compressed',
watch: pkgDir ? path.resolve(pkgDir, 'src') : undefined
})
]
}
return config
}
export function getUmdName (pkg, pathName) {
return pkg.umdName || pathName.replace(/^xgplayer/i, 'XGPlayer').replace(/-([A-Za-z])/g, (_, c) => c.toUpperCase())
}
export function getJsEntry (pkgDir, esEntry = []) {
const esIndex = path.resolve(pkgDir, 'src/index.js')
let entryFileJsUmd = path.resolve(pkgDir, 'src/index.umd.js')
entryFileJsUmd = fs.existsSync(entryFileJsUmd) ? entryFileJsUmd : esIndex
const esEntryFiles = esEntry.map(x => path.resolve(pkgDir, x))
esEntryFiles.push(esIndex)
return [esEntryFiles, entryFileJsUmd]
}
export function getCssEntry (pkgDir) {
const entryFileCss = path.resolve(pkgDir, 'src/index.scss')
const entryFileCssMobile = path.resolve(pkgDir, 'src/index.mobile.scss')
return [fs.existsSync(entryFileCss) && entryFileCss, fs.existsSync(entryFileCssMobile) && entryFileCssMobile]
}
export function getUmdGlobals (peerDependencies, custom) {
let globals = {}
if (peerDependencies.length) {
const pkgNames = fs.readdirSync(packagesDir).reduce((ret, p) => {
try {
const pkgInfo = require(path.resolve(packagesDir, p, 'package.json'))
ret[pkgInfo.name] = getUmdName(pkgInfo, p)
} catch (error) {
// ignore
}
return ret
}, {})
globals = peerDependencies.reduce((ret, c) => {
if (pkgNames[c]) {
ret[c] = pkgNames[c]
}
return ret
}, {})
}
return Object.assign(globals, custom)
}