Libon

Rollup lib build config

rollup 打包插件的基本配置

{
  "name": "",
  "version": "0.4.0",
  "type": "module",
  "description": "",
  "main": "dist/index.js",
  "module": "dist/index.mjs",
  "types": "dist/index.d.ts",
  "exports": {
    "./*": "./*",
    ".": {
      "browser": "./dist/index.module.js",
      "import": "./dist/index.mjs",
      "require": "./dist/index.js"
    }
  },
  "files": [
    "dist"
  ],
  "sideEffects": false,
  "scripts": {
    "fix": "eslint ./**/* --format stylish --fix",
    "dev": "rimraf dist && rollup -w -c ./rollup/dev.config.js",
    "build": "rimraf dist && rollup -c ./rollup/prod.config.js"
  },
  "devDependencies": {
    "@babel/preset-env": "^7.18.6",
    "@rollup/plugin-commonjs": "^22.0.1",
    "@rollup/plugin-node-resolve": "^13.3.0",
    "@rollup/plugin-replace": "^4.0.0",
    "@typescript-eslint/eslint-plugin": "^5.28.0",
    "@typescript-eslint/parser": "^5.28.0",
    "eslint": "^8.20.0",
    "eslint-config-airbnb-base": "^15.0.0",
    "eslint-plugin-import": "^2.26.0",
    "rimraf": "^3.0.2",
    "rollup": "^2.77.0",
    "rollup-plugin-dts": "^4.2.1",
    "rollup-plugin-terser": "^7.0.2",
    "rollup-plugin-typescript2": "^0.31.1",
    "typescript": "^4.7.4"
  }
}

babel.config.js

module.exports = {
  presets: ['@babel/preset-env'],
};

.npmrc

shamefully-hoist=true
prefer-offline=true
{
  "root": true,
  "env": {
    "es6": true,
    "browser": true
  },
  "parserOptions": {
    "ecmaVersion": 2018
  },
  "plugins": [
    "@typescript-eslint"
  ],
  "globals": {
    "window": true,
    "document": true
  },
  "extends": [
    "plugin:@typescript-eslint/eslint-recommended",
    "plugin:@typescript-eslint/recommended",
    "airbnb-base"
  ],
  "ignorePatterns": [
    "node_modules/**",
    "playgrounds/**",
    "rollup/**",
    "dist/**",
    "src/types/**"
  ],
  "overrides": [
    {
      "files": ["*.ts", "*.tsx", "*.d.ts"],
      "parserOptions": {
        "project": ["tsconfig.json"]
      }
    },
    {
      "files": ["rollup/**"],
      "parserOptions": {
        "sourceType": "module"
      },
      "rules": {
        "no-console": "off"
      }
    },
    {
      "files": ["src/**/*"],
      "rules": {
        "import/no-unresolved": "off",
        "import/extensions": ["error", {
          "ignorePackages": true,
          "typescript": "never"
        }],
        "no-param-reassign": ["off"]
      }
    }
  ]
}
{
  "compilerOptions": {
    "sourceMap": true,
    "alwaysStrict": false,
    "declaration": true,
    "declarationMap": true,
    "downlevelIteration": true,
    "importHelpers": true,
    "inlineSources": true,
    "isolatedModules": true,
    "lib": ["es6", "dom"],
    "moduleResolution": "node",
    "noEmitHelpers": true,
    "noErrorTruncation": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitReturns": true,
    "noImplicitUseStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "preserveWatchOutput": true,
    "strictBindCallApply": false,
    "strict": true,
    "target": "es6",
    "types": ["node"],
  },
  "include": ["src/**/*"]
}
root = true

[*]
indent_size = 2
indent_style = space
charset = utf-8
end_of_line = lf
import common from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import typescript from 'rollup-plugin-typescript2';

const onwarn = (msg, warn) =>
  !/Circular|preventAssignment/.test(msg) && warn(msg);

export default [
  {
    input: 'src/index.ts',
    output: {
      file: 'xxx', // 在开发的时候可以直接把测试包打到目标测试的项目里
      format: 'esm',
    },
    plugins: [resolve(), common(), typescript()],
    onwarn,
  },
];
import dts from 'rollup-plugin-dts';
import common from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import typescript from 'rollup-plugin-typescript2';
import { terser } from 'rollup-plugin-terser';

export default [
  {
    input: 'src/index.ts',
    output: {
      file: 'dist/index.js',
      format: 'cjs',
      exports: 'default'
    },
    plugins: [resolve(), common(), typescript(), terser()],
  },

  {
    input: 'src/index.ts',
    output: [
      {
        file: 'dist/index.mjs',
        format: 'esm',
      },
    ],
    plugins: [resolve(), common(), typescript(), terser()],
  },

  {
    input: 'src/index.ts',
    output: [
      {
        file: 'dist/index.module.js',
        format: 'es',
      },
    ],
    plugins: [resolve(), common(), typescript(), terser()],
  },

  {
    input: 'src/index.ts',
    output: [
      {
        file: 'dist/index.d.ts',
        format: 'es',
      },
    ],
    plugins: [dts()],
  },
];
cd ../