rollup.config.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. }),
  88. resolve({
  89. dedupe,
  90. extensions: ['.mjs', '.js', '.ts', '.json']
  91. }),
  92. commonjs(),
  93. typescript()
  94. ],
  95. external: Object.keys(pkg.dependencies).concat(
  96. require('module').builtinModules || Object.keys(process.binding('natives'))
  97. ),
  98. onwarn,
  99. },
  100. serviceworker: {
  101. input: config.serviceworker.input(),
  102. output: config.serviceworker.output(),
  103. plugins: [
  104. resolve(),
  105. replace({
  106. 'process.browser': true,
  107. 'process.env.NODE_ENV': JSON.stringify(mode)
  108. }),
  109. commonjs(),
  110. !dev && terser()
  111. ],
  112. onwarn,
  113. }
  114. };