scripts/rollup.base.js (146 lines of code) (raw):
import path from 'path'
import typescript from 'rollup-plugin-typescript2'
import resolve from 'rollup-plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import externalGlobals from 'rollup-plugin-external-globals'
import injectProcessEnv from 'rollup-plugin-inject-process-env'
import dts from 'rollup-plugin-dts'
import { terser } from 'rollup-plugin-terser'
const presets = () => {
const externals = {
antd: 'antd',
vue: 'Vue',
react: 'React',
moment: 'moment',
'react-is': 'ReactIs',
'@alifd/next': 'Next',
'mobx-react-lite': 'mobxReactLite',
'react-dom': 'ReactDOM',
'element-ui': 'Element',
'@ant-design/icons': 'icons',
'@vue/composition-api': 'VueCompositionAPI',
'@formily/reactive-react': 'Formily.ReactiveReact',
'@formily/reactive-vue': 'Formily.ReactiveVue',
'@formily/reactive': 'Formily.Reactive',
'@formily/path': 'Formily.Path',
'@formily/shared': 'Formily.Shared',
'@formily/validator': 'Formily.Validator',
'@formily/core': 'Formily.Core',
'@formily/json-schema': 'Formily.JSONSchema',
'@formily/react': 'Formily.React',
'@formily/vue': 'Formily.Vue',
'vue-demi': 'VueDemi'
}
return [
typescript({
tsconfig: './tsconfig.build.json',
tsconfigOverride: {
compilerOptions: {
module: 'ESNext',
declaration: false,
},
},
}),
resolve(),
commonjs(),
externalGlobals(externals, {
exclude: ['**/*.{less,sass,scss}'],
}),
]
}
const createEnvPlugin = (env) => {
return injectProcessEnv(
{
NODE_ENV: env,
},
{
exclude: '**/*.{css,less,sass,scss}',
verbose: false,
}
)
}
const inputFilePath = path.join(process.cwd(), 'src/index.ts')
const noUIDtsPackages = [
'formily.core',
'formily.validator',
'formily.shared',
'formily.path',
'formily.json-schema',
'formily.reactive',
]
export const removeImportStyleFromInputFilePlugin = () => ({
name: 'remove-import-style-from-input-file',
transform(code, id) {
// 样式由 build:style 进行打包,所以要删除入口文件上的 `import './style'`
if (inputFilePath === id) {
return code.replace(`import './style';`, '')
}
return code
},
})
export default (filename, targetName, ...plugins) => {
const base = [
{
input: 'src/index.ts',
output: {
format: 'umd',
file: `dist/${filename}.umd.development.js`,
name: targetName,
sourcemap: true,
amd: {
id: filename,
},
globals: {
'@formily/json-schema': 'Formily.JSONSchema',
},
},
external: ['react', 'react-dom', 'react-is', '@formily/json-schema'],
plugins: [...presets(), ...plugins, createEnvPlugin('development')],
},
{
input: 'src/index.ts',
output: {
format: 'umd',
file: `dist/${filename}.umd.production.js`,
name: targetName,
sourcemap: true,
amd: {
id: filename,
},
globals: {
'@formily/json-schema': 'Formily.JSONSchema',
},
},
external: ['react', 'react-dom', 'react-is', '@formily/json-schema'],
plugins: [
...presets(),
terser(),
...plugins,
createEnvPlugin('production'),
],
},
]
if (noUIDtsPackages.includes(filename)) {
base.push({
input: 'esm/index.d.ts',
output: {
format: 'es',
file: `dist/${filename}.d.ts`,
},
plugins: [dts(), ...plugins],
})
base.push({
input: 'esm/index.d.ts',
output: {
format: 'es',
file: `dist/${filename}.all.d.ts`,
},
plugins: [
dts({
respectExternal: true,
}),
...plugins,
],
})
}
return base
}