{"id":26257081,"url":"https://github.com/sunny-117/tiny-webpack","last_synced_at":"2025-10-07T00:57:32.011Z","repository":{"id":220666581,"uuid":"752205289","full_name":"Sunny-117/tiny-webpack","owner":"Sunny-117","description":"✨ A JavaScript bundler with Webpack-like features, supporting modern frontend workflows.","archived":false,"fork":false,"pushed_at":"2025-04-26T13:36:07.000Z","size":13125,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-28T15:15:00.627Z","etag":null,"topics":["code","codesplitting","dynamic-import","loader","loader-plugin","mpa","plugins","prefetch","preload","tree-shaking","webpack5"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sunny-117.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-03T10:47:56.000Z","updated_at":"2025-04-26T13:36:10.000Z","dependencies_parsed_at":"2025-03-13T09:37:03.184Z","dependency_job_id":null,"html_url":"https://github.com/Sunny-117/tiny-webpack","commit_stats":null,"previous_names":["sunny-117/jspack","sunny-117/webpack-core-plugins","sunny-117/tiny-webpack"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Ftiny-webpack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Ftiny-webpack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Ftiny-webpack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sunny-117%2Ftiny-webpack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sunny-117","download_url":"https://codeload.github.com/Sunny-117/tiny-webpack/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251336389,"owners_count":21573188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code","codesplitting","dynamic-import","loader","loader-plugin","mpa","plugins","prefetch","preload","tree-shaking","webpack5"],"created_at":"2025-03-13T20:28:10.693Z","updated_at":"2025-10-07T00:57:26.984Z","avatar_url":"https://github.com/Sunny-117.png","language":"JavaScript","readme":"# tiny-webpack\n\n[![npm version][npm-version-src]][npm-version-href]\n[![npm downloads][npm-downloads-src]][npm-downloads-href]\n[![bundle][bundle-src]][bundle-href]\n[![JSDocs][jsdocs-src]][jsdocs-href]\n[![License][license-src]][license-href]\n\n![alt text](./assets/logo.png)\n\n✨ A JavaScript bundler with Webpack-like features, supporting modern frontend workflows.\n\n📦 Features\n----------\n- 🧩 **Loader \u0026 Plugin System**  \n- 🕰️ **Lazy Loading \u0026 Dynamic Import**  \n- 📦 **Third-party Module Resolution**  \n- ✂️ **Code Splitting \u0026 SplitChunks**  \n- 🌳 **Tree Shaking**  \n- ⚡ **Preload/Prefetch Support**  \n- 🏃 **Loader Runner**  \n- 🧠 **Multi-page Application (MPA) Support**\n\n🚀 Quick Start\n-------------\n### Installation\n```bash\nnpm install tiny-webpack --save-dev\n# or\nyarn add tiny-webpack -D\n```\n\n### Basic Usage\n```javascript\n// jspack.config.js\nimport { resolve } from 'path'\n\nexport default {\n  entry: './src/index.js',\n  output: {\n    path: resolve(__dirname, 'dist'),\n    filename: 'bundle.js'\n  }\n}\n// test.js\nimport { jspack } from 'tiny-webpack'\n\nimport jspackOptions from './jspack.config.js'\n\nconst compiler = jspack(jspackOptions)\ncompiler.run((err, stats) =\u003e {\n  console.log(err, stats.toJson())\n})\n```\n\n⚙️ Configuration Guide\n----------------------\n### Core Options\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `entry` | string/object | - | Entry point(s) |\n| `output.path` | string | - | Output directory |\n| `output.filename` | string | `[name].js` | Output filename pattern |\n| `mode` | `development/production` | `development` | Build environment |\n\n### Loader Configuration\n```javascript\n// handle less file\nexport default {\n  module: {\n    rules: [\n      {\n        test: /\\.less$/,\n        use: [\n          'style-loader',\n          'less-loader'\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Multi-page Application\n```javascript\nconst HtmlWebpackPlugin = require('html-webpack-plugin')\n\nexport default {\n  entry: {\n    page1: './src/page1.js',\n    page2: './src/page2.js'\n  },\n  plugins: [\n    new HtmlWebpackPlugin({\n      template: './src/template.html',\n      chunks: ['page1'],\n      filename: 'page1.html'\n    })\n  ]\n}\n```\n\n🔧 Advanced Features\n-------------------\n### Code Splitting\n```javascript\noptimization: {\n  splitChunks: {\n    chunks: 'all',\n    minSize: 30000,\n    cacheGroups: {\n      vendors: {\n        test: /[\\\\/]node_modules[\\\\/]/,\n        priority: 10\n      }\n    }\n  }\n}\n```\n\n### 懒加载示例\n```javascript\n// dymamic import\nbutton.addEventListener('click', async () =\u003e {\n  const module = await import('./lazy-module.js')\n  module.doSomething()\n})\n```\n\n📚 API Reference\n---------------\n### Loader Interface\n```javascript\n// 自定义loader示例\nexport default function (source) {\n  return `\n    import { createElement } from 'react'\n    ${source}\n  `\n}\n```\n\n### Plugin Development\n```javascript\nclass MyPlugin {\n  apply(compiler) {\n    compiler.hooks.emit.tap('MyPlugin', (assets) =\u003e {\n      // handle assets here\n    })\n  }\n}\n```\n\n📁 Project Structure\n-------------------\n```\nproject-root/\n├── src/\n│   ├── index.js       # entry\n│   └── styles.less    # LESS\n├── loaders/           # custom loader\n├── jspack.config.js   # config\n└── dist/              # output\n```\n\n🛠️ Development Guide\n-------------------\n### custom loader resolver\n```javascript\nexport default {\n  resolveLoader: {\n    modules: ['custom_loaders', 'node_modules']\n  }\n}\n```\n\n### performance optimization\n```javascript\n// prefetch example\nimport(/* webpackPrefetch: true */ './critical-module.js')\n```\n\n## Contributing\n\n```shell\npnpm i\npnpm run dev # tsup 编译 tiny-webpack\ncd playground\npnpm build\n```\n\n## License\n\n[MIT](./LICENSE) License © [Sunny-117](https://github.com/Sunny-117)\n\n\n\u003c!-- Badges --\u003e\n\n[npm-version-src]: https://img.shields.io/npm/v/tiny-webpack?style=flat\u0026colorA=080f12\u0026colorB=1fa669\n[npm-version-href]: https://npmjs.com/package/tiny-webpack\n[npm-downloads-src]: https://img.shields.io/npm/dm/tiny-webpack?style=flat\u0026colorA=080f12\u0026colorB=1fa669\n[npm-downloads-href]: https://npmjs.com/package/tiny-webpack\n[bundle-src]: https://img.shields.io/bundlephobia/minzip/tiny-webpack?style=flat\u0026colorA=080f12\u0026colorB=1fa669\u0026label=minzip\n[bundle-href]: https://bundlephobia.com/result?p=tiny-webpack\n[license-src]: https://img.shields.io/github/license/Sunny-117/tiny-webpack.svg?style=flat\u0026colorA=080f12\u0026colorB=1fa669\n[license-href]: https://github.com/Sunny-117/tiny-webpack/blob/main/LICENSE\n[jsdocs-src]: https://img.shields.io/badge/jsdocs-reference-080f12?style=flat\u0026colorA=080f12\u0026colorB=1fa669\n[jsdocs-href]: https://www.jsdocs.io/package/tiny-webpack\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunny-117%2Ftiny-webpack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunny-117%2Ftiny-webpack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunny-117%2Ftiny-webpack/lists"}