rollup-modules.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const path = require('path')
  2. const { readFileSync } = require('fs')
  3. const nodeResolve = require('rollup-plugin-node-resolve')
  4. // const sass = require('rollup-plugin-sass')
  5. const scss = require('rollup-plugin-scss') // does correct ordering. BAD BUG: can't have SASS includes with same filename. FILE BUG
  6. const { renderBanner, isRelPath, isScssPath, TEMPLATE_PLUGIN, SOURCEMAP_PLUGINS, WATCH_OPTIONS, onwarn, watchSubdirSassIncludes } = require('./rollup-util')
  7. const { pkgStructs, getCorePkgStruct } = require('./pkg-struct')
  8. module.exports = function(isDev) {
  9. return pkgStructs.filter((pkgStruct) => !pkgStruct.isBundle)
  10. .map((pkgStruct) => buildPkgConfig(pkgStruct, isDev))
  11. }
  12. const coreVarsScssString = readFileSync(
  13. path.join(getCorePkgStruct().srcDir, 'styles/_vars.scss'),
  14. 'utf8'
  15. )
  16. function buildPkgConfig(pkgStruct, isDev) {
  17. let banner = renderBanner(pkgStruct.jsonObj)
  18. let anyCss = false
  19. return {
  20. input: path.join('tmp/tsc-output', pkgStruct.srcDir, 'main.js'),
  21. output: {
  22. file: path.join(pkgStruct.distDir, 'main.js'),
  23. format: 'esm',
  24. banner,
  25. sourcemap: isDev,
  26. intro() {
  27. if (anyCss) {
  28. return 'import \'./main.css\';'
  29. }
  30. return ''
  31. }
  32. },
  33. external(id) {
  34. return !isRelPath(id)
  35. },
  36. plugins: [
  37. watchSubdirSassIncludes,
  38. nodeResolve(),
  39. // sass({
  40. // output: true, // to a .css file
  41. // options: {
  42. // // core already has sass vars imported, but inject them for other modules
  43. // data: (pkgStruct.isCore ? '' : coreVarsScssString) + '\n'
  44. // }
  45. // }),
  46. scss({
  47. output: true, // to a .css file
  48. prefix: (pkgStruct.isCore ? '' : coreVarsScssString) + '\n'
  49. }),
  50. TEMPLATE_PLUGIN,
  51. ...(isDev ? SOURCEMAP_PLUGINS : []),
  52. {
  53. resolveId(id) { // TODO: not DRY
  54. if (isScssPath(id) && isRelPath(id)) {
  55. anyCss = true
  56. return { id: path.join(process.cwd(), pkgStruct.srcDir, id), external: false }
  57. }
  58. return null
  59. }
  60. }
  61. ],
  62. watch: WATCH_OPTIONS,
  63. onwarn
  64. }
  65. }