#Rollup + Lerna build and publish minify packages

6 messages · Page 1 of 1 (latest)

inner fable
#

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

#
//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/**"
  ]
}