UNPKG

3 kBJavaScriptView Raw
1'use strict';
2
3// node only > 9.3
4// const nodeBuiltinModules = require('module').builtinModules;
5const nodeBuiltinModules = Object.keys(process.binding('natives')).filter(
6 x => !x.startsWith('internal/')
7);
8const readFileSync = require('fs').readFileSync;
9const babel = require('rollup-plugin-babel');
10const resolve = require('rollup-plugin-node-resolve');
11const cwd = process.cwd();
12const pkg = JSON.parse(readFileSync(`${cwd}/package.json`));
13
14const pobConfig = JSON.parse(readFileSync(`${cwd}/.yo-rc.json`)).pob['pob-config'];
15
16const hasReact = Boolean(
17 (pkg.dependencies && pkg.dependencies.react) ||
18 (pkg.peerDependencies && pkg.peerDependencies.react)
19);
20
21const nodeVersion = version => {
22 switch (String(version)) {
23 case '8':
24 return '8.3';
25 case '6':
26 return '6.5';
27 default:
28 return version;
29 }
30};
31
32const externalModules = nodeBuiltinModules
33 .concat(Object.keys(pkg.dependencies || {}))
34 .concat(Object.keys(pkg.peerDependencies || {}));
35
36if (hasReact) {
37 // allow to resolve .jsx entry files
38 if (!require.extensions['.jsx']) {
39 require.extensions['.jsx'] = require.extensions['.js'];
40 }
41}
42
43const createConfigForEnv = (entry, env, production) => {
44 const devSuffix = production ? '' : '-dev';
45 return {
46 input: require.resolve(`./src/${entry}`, { paths: [cwd] }),
47 output: env.formats.map(format => ({
48 file: `dist/${entry}-${env.target}${env.version || ''}${devSuffix}.${format}.js`,
49 format,
50 sourcemap: true,
51 })),
52 external: path => {
53 if (path.includes('node_modules')) return true;
54 // !path.startsWith('@') &&
55 if (/^[a-z].*\//.test(path)) path = path.replace(/^([^/]+)\/.*$/, '$1');
56 return externalModules.includes(path);
57 },
58 plugins: [
59 babel({
60 babelrc: false,
61 presets: [
62 hasReact && 'babel-preset-pob-react',
63 [
64 require.resolve('babel-preset-pob-env'),
65 {
66 modules: false,
67 target: env.target,
68 version: env.target === 'node' ? nodeVersion(env.version) : env.version,
69 production,
70 flow: true,
71 exportDefaultName: false, // this breaks the build (https://github.com/rollup/rollup/pull/2001 ?)
72 },
73 ],
74 ].filter(Boolean),
75 plugins: [require.resolve('babel-plugin-external-helpers')],
76 externalHelpers: false,
77 exclude: 'node_modules/**',
78 }),
79
80 resolve({
81 customResolveOptions: {
82 extensions: ['.js', hasReact && '.jsx'].filter(Boolean), // TODO: add json ?
83 moduleDirectory: [], // don't resolve node_modules
84 },
85 }),
86 ],
87 };
88};
89
90module.exports = () =>
91 Array.prototype.concat.apply(
92 [],
93 pobConfig.envs.map(env =>
94 Array.prototype.concat.apply(
95 [],
96 pobConfig.entries.map(entry => [
97 createConfigForEnv(entry, env, true),
98 createConfigForEnv(entry, env, false),
99 ])
100 )
101 )
102 );