rollup.config.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import resolve from 'rollup-plugin-node-resolve';
  2. import replace from 'rollup-plugin-replace';
  3. import commonjs from 'rollup-plugin-commonjs';
  4. import svelte from 'rollup-plugin-svelte';
  5. import babel from 'rollup-plugin-babel';
  6. import { terser } from 'rollup-plugin-terser';
  7. import config from 'sapper/config/rollup.js';
  8. import pkg from './package.json';
  9. import typescript from 'rollup-plugin-typescript2';
  10. import autoPreprocess from 'svelte-preprocess';
  11. const mode = process.env.NODE_ENV;
  12. const dev = mode === 'development';
  13. const legacy = !!process.env.SAPPER_LEGACY_BUILD;
  14. const onwarn = (warning, onwarn) => (warning.code === 'CIRCULAR_DEPENDENCY' && /[/\\]@sapper[/\\]/.test(warning.message)) || onwarn(warning);
  15. const dedupe = importee => importee === 'svelte' || importee.startsWith('svelte/');
  16. const preprocessOptions = {
  17. transformers: {
  18. scss: {
  19. includePaths: [
  20. 'node_modules',
  21. 'src'
  22. ]
  23. },
  24. postcss: {
  25. plugins: [
  26. require('autoprefixer'),
  27. ]
  28. }
  29. },
  30. }
  31. export default {
  32. client: {
  33. input: config.client.input(),
  34. output: config.client.output(),
  35. plugins: [
  36. replace({
  37. 'process.browser': true,
  38. 'process.env.NODE_ENV': JSON.stringify(mode)
  39. }),
  40. svelte({
  41. dev,
  42. hydratable: true,
  43. emitCss: true,
  44. preprocess: autoPreprocess(preprocessOptions)
  45. }),
  46. resolve({
  47. browser: true,
  48. dedupe
  49. }),
  50. commonjs(),
  51. legacy && babel({
  52. extensions: ['.js', '.mjs', '.html', '.svelte'],
  53. runtimeHelpers: true,
  54. exclude: ['node_modules/@babel/**'],
  55. presets: [
  56. ['@babel/preset-env', {
  57. targets: '> 0.25%, not dead'
  58. }]
  59. ],
  60. plugins: [
  61. '@babel/plugin-syntax-dynamic-import',
  62. ['@babel/plugin-transform-runtime', {
  63. useESModules: true
  64. }]
  65. ]
  66. }),
  67. !dev && terser({
  68. module: true
  69. })
  70. ],
  71. onwarn,
  72. },
  73. server: {
  74. input: { server: config.server.input().server.replace(/\.js$/, '.ts') },
  75. output: {
  76. ...config.server.output(),
  77. sourcemap: process.env.NODE_ENV == "development"
  78. },
  79. plugins: [
  80. replace({
  81. 'process.browser': false,
  82. 'process.env.NODE_ENV': JSON.stringify(mode)
  83. }),
  84. svelte({
  85. generate: 'ssr',
  86. dev,
  87. preprocess: autoPreprocess(preprocessOptions)
  88. }),
  89. resolve({
  90. dedupe,
  91. extensions: ['.mjs', '.js', '.ts', '.json']
  92. }),
  93. commonjs(),
  94. typescript()
  95. ],
  96. external: Object.keys(pkg.dependencies).concat(
  97. require('module').builtinModules || Object.keys(process.binding('natives'))
  98. ),
  99. onwarn,
  100. },
  101. serviceworker: {
  102. input: config.serviceworker.input(),
  103. output: config.serviceworker.output(),
  104. plugins: [
  105. resolve(),
  106. replace({
  107. 'process.browser': true,
  108. 'process.env.NODE_ENV': JSON.stringify(mode)
  109. }),
  110. commonjs(),
  111. !dev && terser()
  112. ],
  113. onwarn,
  114. }
  115. };