element-plus/build/build.js
2020-12-27 14:16:18 +08:00

82 lines
1.9 KiB
JavaScript

/* eslint-disable */
const pkg = require('../package.json')
const path = require('path')
const css = require('rollup-plugin-css-only')
const { nodeResolve } = require('@rollup/plugin-node-resolve')
const vue = require('rollup-plugin-vue')
const rollup = require('rollup')
const typescript = require('rollup-plugin-typescript2')
const { noElPrefixFile } = require('./common');
const deps = Object.keys(pkg.dependencies)
const root = path.resolve(__dirname, '..');
const defaultOpts = {
plugins: [
nodeResolve(),
css(),
vue({
target: 'browser',
css: false,
}),
typescript({
tsconfigOverride: {
compilerOptions: {
declaration: false,
},
'exclude': [
'node_modules',
'__tests__',
],
},
abortOnError: false,
}),
],
external(id) {
return /^vue/.test(id)
|| /^@element-plus/.test(id)
|| deps.some(k => new RegExp('^' + k).test(id))
},
}
const isPkg = (id) => {
return id.startsWith('@element-plus')
}
const isExcluded = (id) => {
return noElPrefixFile.test(id)
}
const replacePrefix = (prefix, target) => {
return prefix + target.slice(14) // @element-plus/.length = 14
}
const run = async (name, input, isRoot = false) => {
const inputPath = `${path.resolve(root, input)}/index.ts`
defaultOpts.input = inputPath
const getPaths = (id) => {
if (isPkg(id)) {
if (isExcluded(id)) return replacePrefix(isRoot ? './' : '../', id)
return replacePrefix(isRoot ? './el-' : '../el-', id)
}
}
const esm = {
format: 'es',
file: `es/${name}`,
paths: getPaths,
};
const cjs = {
format: 'cjs',
file: `lib/${name}`,
paths: getPaths,
exports: 'named',
};
const bundle = await rollup.rollup(defaultOpts);
await Promise.all([bundle.write(esm), bundle.write(cjs)])
console.log(name, 'build finished');
}
module.exports = run;