rollup.config.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import fs from 'fs'
  2. import path from 'path'
  3. import alias from '@rollup/plugin-alias'
  4. import replace from '@rollup/plugin-replace'
  5. import resolveNode from '@rollup/plugin-node-resolve'
  6. import commonjs from '@rollup/plugin-commonjs'
  7. import babel from '@rollup/plugin-babel'
  8. import babelEnvConfig from './babel.env.config'
  9. import html from 'rollup-plugin-html'
  10. import deps from './scripts/rollup-plugin-deps'
  11. import buble from '@rollup/plugin-buble'
  12. import styles from 'rollup-plugin-styles'
  13. import { terser } from 'rollup-plugin-terser'
  14. const pkg = require(`./package.json`)
  15. const version = pkg.version
  16. const isProd = process.env.NODE_ENV === 'production'
  17. const dist = file => path.resolve('../../dist/sdk/' + file)
  18. function createReplacePlugin() {
  19. const replacements = {
  20. 'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`,
  21. __COMMIT__: `"${process.env.COMMIT}"`,
  22. __VERSION__: `"${version}"`,
  23. __ENV__: `"${process.env.NODE_ENV}"`,
  24. __PROD__: isProd,
  25. __DEV__: !isProd,
  26. }
  27. Object.keys(replacements).forEach(key => {
  28. if (key in process.env) {
  29. replacements[key] = process.env[key]
  30. }
  31. })
  32. return replace({
  33. values: replacements,
  34. preventAssignment: true,
  35. })
  36. }
  37. const sdk_plugins = [
  38. alias({
  39. entries: [{ find: '@sdk', replacement: path.resolve(__dirname, 'src') }],
  40. }),
  41. resolveNode({
  42. preferBuiltins: true,
  43. browser: true,
  44. }),
  45. babel(babelEnvConfig()),
  46. commonjs(),
  47. createReplacePlugin(),
  48. styles(),
  49. ]
  50. const plg_plugins = [
  51. html({
  52. include: '**/*.html',
  53. htmlMinifierOptions: {
  54. collapseWhitespace: true,
  55. collapseBooleanAttributes: true,
  56. conservativeCollapse: true,
  57. minifyJS: true,
  58. },
  59. }),
  60. buble(),
  61. resolveNode({
  62. mainFields: ['jsnext', 'main'],
  63. preferBuiltins: true,
  64. browser: true,
  65. }),
  66. commonjs(),
  67. createReplacePlugin(),
  68. ]
  69. if (isProd) {
  70. sdk_plugins.push(terser())
  71. plg_plugins.push(terser())
  72. }
  73. const plugindir = './src/modules/plugins'
  74. const plugins = fs
  75. .readdirSync(plugindir)
  76. .map(name => {
  77. const file = path.join(plugindir, name)
  78. const input = path.join(file, 'index.js')
  79. let filename = ''
  80. if (name.indexOf('_') !== -1) {
  81. let temp = name.split('_')
  82. filename = temp[0].charAt(0).toUpperCase() + temp[0].substring(1) + temp[1].charAt(0).toUpperCase() + temp[1].substring(1)
  83. } else {
  84. filename = name.charAt(0).toUpperCase() + name.substr(1)
  85. }
  86. if (!fs.statSync(file).isDirectory() || !fs.existsSync(input)) {
  87. return null
  88. }
  89. return {
  90. input: input,
  91. output: [
  92. {
  93. file: dist(`plugins/${filename}.js`), //path.resolve(`../../dist/plugins/${filename}.js`),
  94. format: 'iife',
  95. sourcemap: !isProd,
  96. name: filename,
  97. },
  98. ],
  99. plugins: plg_plugins,
  100. }
  101. })
  102. .filter(entry => entry != null)
  103. export default [
  104. {
  105. input: 'src/index.js',
  106. external: ['three'],
  107. output: [
  108. {
  109. globals: {
  110. three: 'THREE',
  111. },
  112. file: dist('kankan-sdk.js'),
  113. format: 'umd',
  114. name: 'KanKan',
  115. sourcemap: !isProd,
  116. banner: pkg.banner.replace('${date}', new Date().toLocaleDateString()).replace('${author}', pkg.author).replace('${year}', new Date().getFullYear()),
  117. },
  118. ],
  119. plugins: sdk_plugins,
  120. },
  121. {
  122. input: 'kankan-sdk-deps.js',
  123. preserveEntrySignatures: false,
  124. output: [
  125. {
  126. file: dist(`kankan-sdk-deps.js`),
  127. },
  128. ],
  129. plugins: [
  130. deps({
  131. copy: {
  132. targets: [
  133. { dest: dist(`images`), name: 'img' },
  134. { dest: dist(`fonts`), name: 'font' },
  135. ],
  136. verbose: true,
  137. copyOnce: true,
  138. },
  139. mangle: isProd,
  140. }),
  141. ],
  142. onwarn: function (message) {
  143. if (/kankan-sdk-deps/.test(message)) return
  144. console.error(message)
  145. },
  146. },
  147. ].concat(plugins)