You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.7 KiB
100 lines
2.7 KiB
const builtinModules = require('module').builtinModules; |
|
const execSync = require('child_process').execSync; |
|
|
|
const babel = require('rollup-plugin-babel'); |
|
const commonjs = require('rollup-plugin-commonjs'); |
|
//const compiler = require('@ampproject/rollup-plugin-closure-compiler'); |
|
const json = require('rollup-plugin-json'); |
|
const replace = require('rollup-plugin-replace'); |
|
const resolve = require('rollup-plugin-node-resolve'); |
|
const url = require('rollup-plugin-url'); |
|
|
|
const entryManifest = require('./plugins/entryManifest'); |
|
const pkg = require('./package.json'); |
|
const progress = require('rollup-plugin-progress'); |
|
|
|
const buildId = |
|
process.env.BUILD_ID || |
|
execSync('git rev-parse --short HEAD').toString().trim(); |
|
|
|
const manifest = entryManifest(); |
|
|
|
const client = ['browse', 'main'].map(entryName => { |
|
return { |
|
external: ['@emotion/core', 'react', 'react-dom'], |
|
input: `modules/client/${entryName}.js`, |
|
output: { |
|
format: 'iife', |
|
dir: 'public/_client', |
|
entryFileNames: '[name]-[hash].js', |
|
globals: { |
|
react: 'React', |
|
'react-dom': 'ReactDOM', |
|
'@emotion/core': 'emotionCore' |
|
} |
|
}, |
|
moduleContext: { |
|
'node_modules/react-icons/lib/esm/iconBase.js': 'window' |
|
}, |
|
plugins: [ |
|
manifest.record({ publicPath: '/_client/' }), |
|
babel({ exclude: /node_modules/ }), |
|
json(), |
|
resolve(), |
|
progress(), |
|
commonjs({ |
|
namedExports: { |
|
'node_modules/react/index.js': [ |
|
'createContext', |
|
'createElement', |
|
'forwardRef', |
|
'Component', |
|
'Fragment' |
|
] |
|
} |
|
}), |
|
replace({ |
|
'process.env.BUILD_ID': JSON.stringify(buildId), |
|
'process.env.NODE_ENV': JSON.stringify( |
|
process.env.NODE_ENV || 'development' |
|
) |
|
}), |
|
url({ |
|
limit: 5 * 1024, |
|
publicPath: '/_client/' |
|
}), |
|
//compiler() |
|
] |
|
}; |
|
}); |
|
|
|
const dependencies = (process.env.NODE_ENV === 'development' |
|
? Object.keys(pkg.dependencies).concat(Object.keys(pkg.devDependencies || {})) |
|
: Object.keys(pkg.dependencies) |
|
).concat('react-dom/server'); |
|
|
|
const server = { |
|
external: builtinModules.concat(dependencies), |
|
input: 'modules/server.js', |
|
output: { file: 'server.js', format: 'cjs' }, |
|
moduleContext: { |
|
'node_modules/react-icons/lib/esm/iconBase.js': 'global' |
|
}, |
|
plugins: [ |
|
manifest.inject({ virtualId: 'entry-manifest' }), |
|
babel({ exclude: /node_modules/ }), |
|
json(), |
|
resolve(), |
|
commonjs(), |
|
url({ |
|
limit: 5 * 1024, |
|
publicPath: '/_client/', |
|
emitFiles: false |
|
}), |
|
replace({ |
|
'process.env.BUILD_ID': JSON.stringify(buildId) |
|
}) |
|
] |
|
}; |
|
|
|
module.exports = client.concat(server);
|
|
|