194 lines
5.9 KiB
JavaScript
194 lines
5.9 KiB
JavaScript
|
/*
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||
|
* or more contributor license agreements. See the NOTICE file
|
||
|
* distributed with this work for additional information
|
||
|
* regarding copyright ownership. The ASF licenses this file
|
||
|
* to you under the Apache License, Version 2.0 (the
|
||
|
* "License"); you may not use this file except in compliance
|
||
|
* with the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing,
|
||
|
* software distributed under the License is distributed on an
|
||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||
|
* KIND, either express or implied. See the License for the
|
||
|
* specific language governing permissions and limitations
|
||
|
* under the License.
|
||
|
*/
|
||
|
|
||
|
const nodeResolvePlugin = require('@rollup/plugin-node-resolve').default;
|
||
|
const nodePath = require('path');
|
||
|
const ecDir = nodePath.resolve(__dirname, '..');
|
||
|
const {terser} = require('rollup-plugin-terser');
|
||
|
const replace = require('@rollup/plugin-replace');
|
||
|
const MagicString = require('magic-string');
|
||
|
const preamble = require('./preamble');
|
||
|
|
||
|
function createAddLicensePlugin(sourcemap) {
|
||
|
return {
|
||
|
renderChunk(code, chunk) {
|
||
|
const s = new MagicString(code);
|
||
|
s.prepend(preamble.js);
|
||
|
return {
|
||
|
code: s.toString(),
|
||
|
map: sourcemap ? s.generateMap({ hires: true }).toString() : null
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function createOutputs(basename, { min, fileExtension }, commonOutputOpts) {
|
||
|
commonOutputOpts = {
|
||
|
format: 'umd',
|
||
|
...commonOutputOpts
|
||
|
}
|
||
|
function createReplacePlugin(replacement) {
|
||
|
const plugin = replace({
|
||
|
'process.env.NODE_ENV': JSON.stringify(replacement)
|
||
|
});
|
||
|
// Remove transform hook. It will have warning when using in output
|
||
|
delete plugin.transform;
|
||
|
return plugin;
|
||
|
}
|
||
|
const output = [{
|
||
|
...commonOutputOpts,
|
||
|
// Disable sourcemap in
|
||
|
sourcemap: true,
|
||
|
plugins: [
|
||
|
createReplacePlugin('development'),
|
||
|
createAddLicensePlugin(true)
|
||
|
],
|
||
|
file: basename + (fileExtension || '.js')
|
||
|
}];
|
||
|
|
||
|
if (min) {
|
||
|
output.push({
|
||
|
...commonOutputOpts,
|
||
|
// Disable sourcemap in min file.
|
||
|
sourcemap: false,
|
||
|
// TODO preamble
|
||
|
plugins: [
|
||
|
createReplacePlugin('production'),
|
||
|
terser(),
|
||
|
createAddLicensePlugin(false)
|
||
|
],
|
||
|
file: basename + '.min' + (fileExtension || '.js')
|
||
|
})
|
||
|
}
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {Object} [opt]
|
||
|
* @param {string} [opt.type=''] 'all' or 'simple' or 'common', default is 'all'
|
||
|
* @param {boolean} [opt.sourcemap] If set, `opt.input` is required too, and `opt.type` is ignored.
|
||
|
* @param {string} [opt.format='umd'] If set, `opt.input` is required too, and `opt.type` is ignored.
|
||
|
* @param {string} [opt.min=false] If build minified output
|
||
|
* @param {boolean} [opt.addBundleVersion=false] Only for debug in watch, prompt that the two build is different.
|
||
|
* @param {string} [opt.fileExtension=undefined] output file extension, default is '.js'. Should start with '.'.
|
||
|
*/
|
||
|
exports.createECharts = function (opt = {}) {
|
||
|
const srcType = opt.type !== 'all' ? '.' + opt.type : '';
|
||
|
const postfixType = srcType;
|
||
|
const format = opt.format || 'umd';
|
||
|
const postfixFormat = (format !== 'umd') ? '.' + format.toLowerCase() : '';
|
||
|
|
||
|
const input = nodePath.resolve(ecDir, `index${srcType}.js`);
|
||
|
|
||
|
return {
|
||
|
plugins: [nodeResolvePlugin()],
|
||
|
treeshake: {
|
||
|
moduleSideEffects: false
|
||
|
},
|
||
|
|
||
|
input: input,
|
||
|
|
||
|
output: createOutputs(
|
||
|
nodePath.resolve(ecDir, `dist/echarts${postfixFormat}${postfixType}`),
|
||
|
opt,
|
||
|
{
|
||
|
name: 'echarts',
|
||
|
// Ignore default exports, which is only for compatible code like:
|
||
|
// import echarts from 'echarts/lib/echarts';
|
||
|
exports: 'named',
|
||
|
format: format
|
||
|
}
|
||
|
)
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.createBMap = function (opt) {
|
||
|
const input = nodePath.resolve(ecDir, `extension/bmap/bmap.js`);
|
||
|
|
||
|
return {
|
||
|
plugins: [nodeResolvePlugin()],
|
||
|
input: input,
|
||
|
external: ['echarts'],
|
||
|
output: createOutputs(
|
||
|
nodePath.resolve(ecDir, `dist/extension/bmap`),
|
||
|
opt,
|
||
|
{
|
||
|
name: 'bmap',
|
||
|
globals: {
|
||
|
// For UMD `global.echarts`
|
||
|
echarts: 'echarts'
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.createDataTool = function (opt) {
|
||
|
let input = nodePath.resolve(ecDir, `extension/dataTool/index.js`);
|
||
|
|
||
|
return {
|
||
|
plugins: [nodeResolvePlugin()],
|
||
|
input: input,
|
||
|
external: ['echarts'],
|
||
|
output: createOutputs(
|
||
|
nodePath.resolve(ecDir, `dist/extension/dataTool`),
|
||
|
opt,
|
||
|
{
|
||
|
name: 'dataTool',
|
||
|
globals: {
|
||
|
// For UMD `global.echarts`
|
||
|
echarts: 'echarts'
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.createMyTransform = function (opt) {
|
||
|
let input = nodePath.resolve(ecDir, `test/lib/myTransform/src/index.ts`);
|
||
|
|
||
|
return {
|
||
|
plugins: [nodeResolvePlugin()],
|
||
|
input: input,
|
||
|
output: createOutputs(
|
||
|
nodePath.resolve(ecDir, `test/lib/myTransform/dist/myTransform`),
|
||
|
opt,
|
||
|
{
|
||
|
name: 'myTransform'
|
||
|
}
|
||
|
)
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.createSSRClient = function (opt) {
|
||
|
const input = nodePath.resolve(ecDir, `ssr/client/lib/index.js`);
|
||
|
|
||
|
return {
|
||
|
plugins: [nodeResolvePlugin()],
|
||
|
input: input,
|
||
|
output: createOutputs(
|
||
|
nodePath.resolve(ecDir, `ssr/client/dist/index`),
|
||
|
opt,
|
||
|
{
|
||
|
name: 'echarts-ssr-client'
|
||
|
}
|
||
|
)
|
||
|
};
|
||
|
};
|