chore: separate esm build (#416)

This commit is contained in:
Miralem Drek
2020-04-29 09:17:08 +02:00
committed by GitHub
parent 6a28ec3dd4
commit e6635b5585
6 changed files with 90 additions and 28 deletions

View File

@@ -2,3 +2,4 @@ dist/
coverage/
node_modules/
apis/snapshooter/client.js
apis/*/core/**/*.js

3
.gitignore vendored
View File

@@ -13,4 +13,5 @@ coverage/
dist/
temp/
test/**/__artifacts__/regression
test/**/__artifacts__/diff
test/**/__artifacts__/diff
apis/*/core/**/*.js

View File

@@ -0,0 +1,10 @@
{
"module": "esm/index.js",
"peerDependencies": {
"@material-ui/core": "^4.9.0",
"@material-ui/icons": "^4.5.1",
"@material-ui/styles": "^4.9.0",
"react": "^16.12.0",
"react-dom": "^16.12.0"
}
}

View File

@@ -20,11 +20,11 @@
"directory": "apis/stardust"
},
"main": "index.js",
"module": "dist/stardust.esm",
"jsdelivr": "dist/stardust.js",
"unpkg": "dist/stardust.js",
"files": [
"LICENSE",
"core",
"dist"
],
"scripts": {
@@ -52,12 +52,5 @@
"react-window-infinite-loader": "1.0.5",
"regenerator-runtime": "0.13.5",
"semver": "6.3.0"
},
"peerDependencies": {
"@material-ui/core": "^4.9.0",
"@material-ui/icons": "^4.5.1",
"@material-ui/styles": "^4.9.0",
"react": "^16.12.0",
"react-dom": "^16.12.0"
}
}

View File

@@ -23,7 +23,7 @@ const cfg = ({ srcDir, distDir, dev = false, serveConfig = {} }) => {
eDev: [path.resolve(srcDir, 'eDev')],
eHub: [path.resolve(srcDir, 'eHub')],
},
devtool: dev ? 'cheap-module-eval-source-map' : 'source-map',
devtool: dev ? 'cheap-module-eval-source-map' : false,
output: {
path: distDir,
filename: '[name].js',

View File

@@ -13,6 +13,13 @@ const cwd = process.cwd();
const pkg = require(path.join(cwd, 'package.json')); // eslint-disable-line
const { name, version, license } = pkg;
let corePkg;
try {
corePkg = require(path.join(cwd, 'core', 'package.json')); // eslint-disable-line
} catch (e) {
// do nothing
}
const versionHash = crypto.createHash('md5').update(version).digest('hex').slice(0, 4);
const targetName = name.split('/')[1];
@@ -87,37 +94,40 @@ const propTypes = [
const watch = process.argv.indexOf('-w') > 2;
const config = (isEsm, dev = false) => {
const config = ({ format = 'umd', debug = false, file, targetPkg }) => {
const umdName = targetName
.replace(/-([a-z])/g, (m, p1) => p1.toUpperCase())
.split('.js')
.join('');
if (Object.keys(pkg.dependencies || {}).length) {
if (Object.keys(targetPkg.dependencies || {}).length) {
throw new Error('Dependencies for a web javascript library makes no sense');
}
const peers = Object.keys(pkg.peerDependencies || {});
const peers = Object.keys(targetPkg.peerDependencies || {});
// all peers should be externals for esm bundle
const esmExternals = peers;
// const esmExternals = peers;
// peers that are not devDeps should be externals for full bundle
const bundleExternals = peers.filter((p) => typeof (pkg.devDependencies || {})[p] === 'undefined');
// const bundleExternals = peers.filter((p) => typeof (pkg.devDependencies || {})[p] === 'undefined');
const external = isEsm ? esmExternals : bundleExternals;
const external = peers;
const globals = {};
external.forEach((e) => {
if ([GLOBALS[e]]) {
globals[e] = GLOBALS[e];
} else {
console.warn(`External '${e}' has no global value`);
}
});
const cfg = {
input: path.resolve(cwd, 'src', 'index'),
output: {
file: path.resolve(targetDir, getFileName(isEsm ? 'esm' : '', dev)),
format: isEsm ? 'esm' : 'umd',
// file: path.resolve(targetDir, getFileName(isEsm ? 'esm' : '', dev)),
file,
format,
exports: ['test-utils', 'stardust'].indexOf(targetName) !== -1 ? 'named' : 'default',
name: umdName,
sourcemap: false,
@@ -127,13 +137,13 @@ const config = (isEsm, dev = false) => {
external,
plugins: [
replace({
__NEBULA_DEV__: dev,
'process.env.NODE_ENV': JSON.stringify(isEsm ? 'development' : 'production'),
__NEBULA_DEV__: debug,
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV === 'development' ? 'development' : 'production'),
'process.env.NEBULA_VERSION': JSON.stringify(version),
'process.env.NEBULA_VERSION_HASH': JSON.stringify(versionHash),
}),
nodeResolve({
extensions: [dev ? '.dev.js' : false, '.js', '.jsx'].filter(Boolean),
extensions: [debug ? '.dev.js' : false, '.js', '.jsx'].filter(Boolean),
}),
json(),
commonjs({
@@ -194,7 +204,7 @@ const config = (isEsm, dev = false) => {
],
};
if (!dev) {
if (!debug) {
cfg.plugins.push(
terser({
output: {
@@ -209,18 +219,65 @@ const config = (isEsm, dev = false) => {
let dist = [
// production
watch ? false : config(),
watch
? false
: config({
targetPkg: pkg,
file: path.resolve(targetDir, getFileName()),
}),
// dev
watch ? false : config(false, true),
watch
? false
: config({
debug: true,
targetPkg: pkg,
file: path.resolve(targetDir, getFileName('', true)),
}),
// esm
pkg.module ? config(true) : false,
pkg.module
? config({
format: 'esm',
targetPkg: pkg,
file: path.resolve(targetDir, getFileName('esm', false)),
})
: false,
// esm dev
pkg.module ? config(true, true) : false,
pkg.module
? config({
debug: true,
format: 'esm',
targetPkg: pkg,
file: path.resolve(targetDir, getFileName('esm', true)),
})
: false,
// core esm
corePkg && corePkg.module
? config({
format: 'esm',
targetPkg: corePkg,
file: path.resolve(cwd, 'core', corePkg.module),
})
: false,
// core esm dev
corePkg && corePkg.module
? config({
debug: true,
format: 'esm',
targetPkg: corePkg,
file: path.resolve(cwd, 'core', 'esm', 'dev.js'),
})
: false,
];
if (targetName === 'test-utils') {
dist = [config(false)];
dist = [
config({
targetPkg: pkg,
file: path.resolve(targetDir, getFileName()),
}),
];
}
module.exports = dist.filter(Boolean);