설명 없음

rollup.config.js 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import resolve from "@rollup/plugin-node-resolve";
  2. import commonjs from "@rollup/plugin-commonjs";
  3. import image from '@rollup/plugin-image';
  4. import alias from '@rollup/plugin-alias';
  5. import postcss from 'rollup-plugin-postcss-modules'
  6. import babel from "rollup-plugin-babel";
  7. import json from "rollup-plugin-json";
  8. import autoprefixer from 'autoprefixer';
  9. import postcssUrl from 'postcss-url';
  10. import peerDepsExternal from 'rollup-plugin-peer-deps-external';
  11. // import url from '@rollup/plugin-url';
  12. // import less from "rollup-plugin-less";
  13. import nodeEval from 'node-eval';
  14. export function getModuleExports(moduleId) {
  15. const id = require.resolve(moduleId)
  16. const moduleOut = nodeEval(fs.readFileSync(id).toString(), id)
  17. let result = []
  18. const excludeExports = /^(default|__)/
  19. if (moduleOut && typeof moduleOut === 'object') {
  20. result = Object.keys(moduleOut)
  21. .filter(name => !excludeExports.test(name))
  22. }
  23. return result
  24. }
  25. export function getNamedExports(moduleIds) {
  26. const result = {}
  27. moduleIds.forEach( id => {
  28. result[id] = getModuleExports(id)
  29. })
  30. return result
  31. }
  32. const fs = require('fs');
  33. const path = require('path');
  34. const componentFold = 'src/components';
  35. const cModuleNames = fs.readdirSync(path.resolve(componentFold));
  36. const cModuleMap = cModuleNames.reduce((prev, name) => {
  37. prev[name] = `${componentFold}/${name}/index.ts`;
  38. return prev;
  39. }, {});
  40. console.log('cModuleMap: ', cModuleMap);
  41. const extensions = ['.js', '.jsx', '.ts', '.tsx'];
  42. export default {
  43. input: {
  44. '.': "src/lib-build.js",
  45. ...cModuleMap
  46. },
  47. output: [
  48. {
  49. dir: "lib",
  50. sourcemap: true,
  51. entryFileNames: '[name]/index.js',
  52. exports: 'named',
  53. // file: "lib/bundle.js",
  54. format: "cjs"
  55. },
  56. {
  57. dir: "lib/ESModule",
  58. sourcemap: true,
  59. entryFileNames: '[name]/index.js',
  60. exports: 'named',
  61. // file: "lib/bundle.js",
  62. format: "es"
  63. }
  64. ],
  65. plugins: [
  66. peerDepsExternal(),
  67. resolve({
  68. mainFields: ['jsnext'],
  69. preferBuiltins: true,
  70. browser: true,
  71. extensions,
  72. }),
  73. commonjs({
  74. include: 'node_modules/**',
  75. browser: true,
  76. namedExports: getNamedExports([
  77. 'prop-types',
  78. ])
  79. }),
  80. babel({
  81. exclude: "node_modules/**",
  82. runtimeHelpers: true,
  83. extensions,
  84. }),
  85. image(),
  86. json(),
  87. // url(),
  88. // less(),
  89. postcss({
  90. extensions: ['.css', '.less'],
  91. plugins: [
  92. autoprefixer(),
  93. postcssUrl({
  94. url: 'inline'
  95. }),
  96. ],
  97. modules: true,
  98. }),
  99. alias({
  100. entries: [
  101. { find: '@', replacement: 'src' },
  102. { find: '@components', replacement: 'src/components' },
  103. ]
  104. }),
  105. ],
  106. onwarn: function(warning) {
  107. // Skip certain warnings
  108. // should intercept ... but doesn't in some rollup versions
  109. if ( warning.code === 'THIS_IS_UNDEFINED' ) { return; }
  110. // console.warn everything else
  111. console.warn( warning.message );
  112. }
  113. };