206 lines
4.5 KiB
Plaintext
206 lines
4.5 KiB
Plaintext
import { nodeResolve } from '@rollup/plugin-node-resolve';
|
|
import { terser } from 'rollup-plugin-terser';
|
|
import babel from '@rollup/plugin-babel';
|
|
import {version} from './package.json'
|
|
|
|
const injectVersion = (options = {}) => {
|
|
return {
|
|
name: 'inject-version',
|
|
renderChunk: (code) => {
|
|
return code.replace('[[BM_VERSION]]', version)
|
|
},
|
|
}
|
|
}
|
|
|
|
const addNavigatorValidation = (options = {}) => {
|
|
return {
|
|
name: 'inject-version',
|
|
renderChunk: (code) => {
|
|
return '(typeof navigator !== "undefined") && ' + code
|
|
},
|
|
}
|
|
}
|
|
|
|
const noTreeShakingForStandalonePlugin = () => {
|
|
return {
|
|
name: 'no-treeshaking-for-standalone',
|
|
transform(code) {
|
|
// This is very fast but can produce lots of false positives.
|
|
// Use a good regular expression or parse an AST and analyze scoping to improve as needed.
|
|
if (code.indexOf('__[STANDALONE]__') >= 0) return {moduleSideEffects: 'no-treeshake'};
|
|
}
|
|
}
|
|
}
|
|
|
|
const destinationBuildFolder = 'build/player/';
|
|
|
|
const builds = [
|
|
{
|
|
input: 'player/js/modules/full.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/full.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/svg_light.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_light.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/svg_light.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_light.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/svg.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_svg.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/svg.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_svg.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/canvas.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_canvas.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/canvas_light.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_light_canvas.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/canvas_light.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_light_canvas.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/canvas.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_canvas.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/html_light.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_light_html.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/html_light.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_light_html.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/html.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_html.min.js',
|
|
esm: true,
|
|
},
|
|
{
|
|
input: 'player/js/modules/html.js',
|
|
dest: `${destinationBuildFolder}`,
|
|
file: 'lottie_html.js',
|
|
esm: false,
|
|
skipTerser: true,
|
|
},
|
|
];
|
|
|
|
const plugins = [
|
|
nodeResolve(),
|
|
babel({
|
|
babelHelpers: 'runtime',
|
|
skipPreflightCheck: true,
|
|
}),
|
|
// noTreeShakingForStandalonePlugin(),
|
|
injectVersion(),
|
|
addNavigatorValidation(),
|
|
]
|
|
const pluginsWithTerser = [
|
|
...plugins,
|
|
terser(),
|
|
]
|
|
|
|
const UMDModule = {
|
|
output: {
|
|
format: 'umd',
|
|
name: 'lottie', // this is the name of the global object
|
|
esModule: false,
|
|
exports: 'default',
|
|
sourcemap: false,
|
|
compact: false,
|
|
},
|
|
treeshake: false,
|
|
};
|
|
|
|
const ESMModule = {
|
|
plugins: [nodeResolve()],
|
|
treeshake: false,
|
|
output: [
|
|
{
|
|
format: 'esm',
|
|
exports: 'named',
|
|
},
|
|
{
|
|
format: 'cjs',
|
|
exports: 'named',
|
|
},
|
|
],
|
|
};
|
|
|
|
const exports = builds.reduce((acc, build) => {
|
|
const builds = [];
|
|
builds.push({
|
|
...UMDModule,
|
|
plugins: !build.skipTerser ? pluginsWithTerser : plugins,
|
|
input: build.input,
|
|
output: {
|
|
...UMDModule.output,
|
|
file: `${build.dest}${build.file}`,
|
|
}
|
|
});
|
|
if (build.esm) {
|
|
builds.push({
|
|
...ESMModule,
|
|
input: build.input,
|
|
output: [
|
|
{
|
|
...ESMModule.output[0],
|
|
file: 'dist/esm/' + build.file,
|
|
file: `${destinationBuildFolder}esm/${build.file}`,
|
|
},
|
|
{
|
|
...ESMModule.output[1],
|
|
file: `${destinationBuildFolder}cjs/${build.file}`,
|
|
}
|
|
]
|
|
});
|
|
}
|
|
|
|
acc = acc.concat(builds);
|
|
return acc;
|
|
}, []);
|
|
export default exports;
|