scripts/rollup.base.js (92 lines of code) (raw):

import typescript from 'rollup-plugin-typescript2' import resolve from 'rollup-plugin-node-resolve' import postcss from 'rollup-plugin-postcss' import commonjs from '@rollup/plugin-commonjs' import NpmImport from 'less-plugin-npm-import' import externalGlobals from 'rollup-plugin-external-globals' import { terser } from 'rollup-plugin-terser' import path from 'path' 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', '@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', '@designable/shared': 'Designable.Shared', '@designable/core': 'Designable.Core', '@designable/react': 'Designable.React', '@designable/react-sandbox': 'Designable.ReactSandbox', '@designable/react-settings-form': 'Designable.ReactSettingsForm', } return [ typescript({ tsconfig: './tsconfig.json', tsconfigOverride: { compilerOptions: { module: 'ESNext', declaration: false, }, }, }), resolve(), postcss({ extract: true, minimize: true, // extensions: ['.css', '.less', '.sass'], use: { less: { plugins: [new NpmImport({ prefix: '~' })], javascriptEnabled: true, }, sass: {}, stylus: {}, }, }), commonjs(), externalGlobals(externals), ] } const inputFilePath = path.join(process.cwd(), 'src/index.ts') 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) => [ { input: 'src/index.ts', output: { format: 'umd', file: `dist/${filename}.umd.production.min.js`, name: targetName, }, plugins: [...presets(filename, targetName), ...plugins], }, { input: 'src/index.ts', output: { format: 'umd', file: `dist/${filename}.umd.production.js`, name: targetName, }, plugins: [...presets(filename, targetName), terser(), ...plugins], }, ]