Hey there! I'm new at monorepo's topic but trying to get better on it.
I have had configured some files bellow and get this result:
Creating packages minified on dist root path of project.
But having the "problems" in sequence:
Duplicating node_modules
Not creating again package.json file for individual package (So I can't list all packages with lerna)
import path modified after build
#Rollup + Lerna build and publish minify packages
6 messages · Page 1 of 1 (latest)
//lerna.json
{
"packages": [
"packages/**"
],
"version": "independent",
"npmClient": "npm",
"useWorkspaces":true
}
//buildUtils.js
const fs = require('fs');
export const getFiles = (entry, extensions = [], excludeExtensions = []) => {
let fileNames = [];
const dirs = fs.readdirSync(entry);
dirs.forEach((dir) => {
const path = `${entry}/${dir}`;
if (fs.lstatSync(path).isDirectory()) {
fileNames = [
...fileNames,
...getFiles(path, extensions, excludeExtensions),
];
return;
}
if (!excludeExtensions.some((exclude) => dir.endsWith(exclude))
&& extensions.some((ext) => dir.endsWith(ext))
) {
fileNames.push(path);
}
});
return fileNames;
}
//package.json
{
"name": "@monorepo/root",
"private": true,
"version": "independent",
"scripts": {
"publish": "bash ./scripts/publish-package.sh",
"build": "rollup -c --bundleConfigAsCjs",
"test": "lerna run test",
"graph": "npx nx graph",
"storybook": "bash ./scripts/run-storybook.sh",
"build-storybook": "build-storybook"
},
"workspaces": [
"packages/**"
],
"devDependencies": {
"@babel/core": "^7.20.2",
"@storybook/addon-actions": "^6.5.13",
"@storybook/addon-essentials": "^6.5.13",
"@storybook/addon-interactions": "^6.5.13",
"@storybook/addon-links": "^6.5.13",
"@storybook/builder-vite": "^0.2.5",
"@storybook/mdx2-csf": "^0.0.3",
"@storybook/react": "^6.5.13",
"@storybook/testing-library": "^0.0.13",
"babel-loader": "^8.3.0",
"lerna": "^6.0.3",
"rollup": "*",
"typescript": "*"
},
"dependencies": {
"@rollup/plugin-commonjs": "^24.0.0",
"rollup-plugin-terser":"*",
"@rollup/plugin-json": "^6.0.0",
"@rollup/plugin-node-resolve": "^15.0.1",
"@rollup/plugin-typescript": "*",
"@storybook/addon-docs": "^6.5.13",
"acorn": "^8.8.1",
"vite": "^3.2.4"
}
}
//rollup.config.js
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import json from "@rollup/plugin-json";
import { getFiles } from './scripts/buildUtils.js';
import { terser } from 'rollup-plugin-terser';
const extensions = ['.js', '.ts', '.jsx', '.tsx'];
export default {
input: [
...getFiles('./packages/web', extensions),
],
output: {
dir: 'dist',
format: 'esm',
preserveModules: true,
preserveModulesRoot: 'packages',
sourcemap: true,
},
plugins: [
resolve(),
commonjs(),
typescript({
tsconfig: './tsconfig.build.json',
declaration: true,
declarationDir: 'dist',
}),
json(),
terser()
],
};
//tsconfig.build.json
{
"extends": "./tsconfig.json",
"exclude": [
"node_modules",
"build",
"dist",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/stories/**"
]
}