Spaces:
Running
Running
/* | |
* 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' | |
} | |
) | |
}; | |
}; | |