{"id":16172112,"url":"https://github.com/zoy-l/vitx","last_synced_at":"2025-03-16T10:31:07.128Z","repository":{"id":47207087,"uuid":"328330359","full_name":"zoy-l/vitx","owner":"zoy-l","description":"😃 Simple transform tool","archived":false,"fork":false,"pushed_at":"2022-08-11T14:57:09.000Z","size":3739,"stargazers_count":135,"open_issues_count":0,"forks_count":12,"subscribers_count":15,"default_branch":"main","last_synced_at":"2024-10-11T03:44:52.543Z","etag":null,"topics":["javascript","lerna","library","miniapp","node","typescript","vitx"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/zoy-l.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}},"created_at":"2021-01-10T07:47:52.000Z","updated_at":"2024-07-15T16:05:46.000Z","dependencies_parsed_at":"2022-09-19T17:31:31.702Z","dependency_job_id":null,"html_url":"https://github.com/zoy-l/vitx","commit_stats":null,"previous_names":["l-zoy/vitx","l-zoy/zmi-nerd"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoy-l%2Fvitx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoy-l%2Fvitx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoy-l%2Fvitx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoy-l%2Fvitx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoy-l","download_url":"https://codeload.github.com/zoy-l/vitx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221662696,"owners_count":16859732,"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":["javascript","lerna","library","miniapp","node","typescript","vitx"],"created_at":"2024-10-10T03:44:52.560Z","updated_at":"2024-10-27T10:25:19.819Z","avatar_url":"https://github.com/zoy-l.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔨 vitx\n\n简单的编译工具\n\n[![lerna](https://img.shields.io/badge/support-lerna-blue)](https://lernajs.io/) [![GitHub license](https://img.shields.io/github/license/l-zoy/vitx)](https://github.com/l-zoy/vitx/blob/master/LICENSE) [![codecov](https://codecov.io/gh/l-zoy/vitx/branch/main/graph/badge.svg?token=W1ND9EDZEJ)](https://codecov.io/gh/l-zoy/vitx) [![\u003cORG_NAME\u003e](https://circleci.com/gh/l-zoy/vitx.svg?style=svg)](https://app.circleci.com/pipelines/github/l-zoy/vitx)\n\n文档功能开发中\n\n## Features\n\n- **支持** `typescript`\n- **支持** 多目录`workspaces`编译\n- **支持** `cjs` 和 `esm`\n- **支持** 自定义 `stream` 扩展, 支持 `gulp` 插件\n- **支持** `sourcemap`\n- **支持** `小程序`编译\n- **支持** `增量编译`\n- **支持** 支持`vue` 和 `react` 文件编译\n- **支持** 支持`less`编译\n- **支持** 支持路径别名`alias`\n- **支持** `jest`\n\n## Installation\n\nInstall `vitx` via yarn or npm.\n\n```bash\n$ yarn add vitx\n```\n\n## Usage\n\n```bash\n# Bundle library\n$ vitx build\n\n# Watch dev\n$ vitx build --watch\n```\n\n```bash\n\n$ yarn add jest -D\n\n# Bundle library\n$ vitx test\n\n```\n\n注:\n\n- 目录下添加 `jest.config.js` 或者 `jest.config.ts` 配置即可, 如果是 `node` 应用直接运行即可\n- 默认配置可参考 [jest-config](https://github.com/l-zoy/vitx/blob/main/packages/vitx/src/jestConfig.ts)\n\n修改或覆盖:\n\n```typescript\nimport { IJestConfig } from 'vitx'\n\nexport default \u003cIJestConfig\u003e{\n  // 如果是一个函数则会传入默认值最后返回新值\n  // 如果是一个非函数值会进行直接覆盖\n  collectCoverageFrom(memo) {\n    return memo.concat([\n      '!packages/vitx/src/jestConfig.ts',\n      '!packages/vitx/src/cli.ts',\n      '!packages/vitx/src/jestTransformer.ts',\n      '!packages/vitx/src/jestRun.ts'\n    ])\n  }\n}\n```\n\n## Config\n\n新建 `.vitxrc.js` or `.vitxrc.ts` 文件进行配置。\n\n```js\nimport { IConfig } from 'vitx'\n\nexport default {\n  moduleType: 'cjs',\n  target: 'node',\n  alias: {\n    '@': './src'\n  }\n} as IConfig\n```\n\n### tsconfig.json\n\n会自动读取 `tsconfig.json` 的 `compilerOptions` 的配置进行编译 `ts` or `tsx`\n\n### Options\n\n#### \u003cfont color=\"#FFA500\" \u003emoduleType\u003c/font\u003e\n\n输出格式,打包方式等\n\n- Type: `\"cjs\" | \"esm\" | \"all\" `\n- Default: `\"esm\"`\n\n`all` 会同时输出 `cjs` 和 `esm` 的格式文件\n\n#### \u003cfont color=\"#FFA500\" \u003eextraBabelPresets\u003c/font\u003e\n\n配置额外的 Babel presets。\n\n- Type: `array`\n- Default: `[]`\n\n#### \u003cfont color=\"#FFA500\" \u003eextraBabelPlugins\u003c/font\u003e\n\n添加 Babel Plugins\n\n- Type: `array`\n- Default: `[]`\n\n#### \u003cfont color=\"#FFA500\" \u003etarget\u003c/font\u003e\n\nnode 库 or browser 库，只作用于语法层。\n\n- Type: `\"node\" | \"browser\"`\n- Default: `\"browser\"`\n\n`node`，兼容到 node@6 `browser`，兼容到 `['last 2 versions', 'IE 10']`\n\n#### \u003cfont color=\"#FFA500\" \u003eframe\u003c/font\u003e\n\n支持`.vue`单文件编译及`vue jsx or tsx` (只支持 vue3) 支持`react jsx or tsx` 注意目前必须要指定框架\n\n- Type: `\"vue\" | \"react\"`\n- Default: ``\n\n#### \u003cfont color=\"#FFA500\" \u003ealias\u003c/font\u003e\n\n路径别名, 参考 `webpack` alias 参数, 支持大部分主流文件类型, 支持小程序\n\n- Type: `object`\n- Default: `undefined`\n\n```js\nimport path from 'path'\nconst root = path.join(__dirname, './src')\n\nexport default {\n  alias: {\n    '@': root,\n    '@pkg': path.join(root, 'index'),\n    '@utils': path.join(root, 'utils')\n  }\n}\n```\n\n#### \u003cfont color=\"#FFA500\" \u003ebrowserFiles\u003c/font\u003e\n\ntarget 为 `node` 时，配置例外文件走 `browser` target。\n\n- Type: `[string]`\n- Default: `[]`\n\n注：所有 `.tsx` 和 `.jsx` 文件始终走 `browser` target。\n\n#### \u003cfont color=\"#FFA500\" \u003enodeFiles\u003c/font\u003e\n\ntarget 为 `browser` 时，配置例外文件走 `node` target。\n\n- Type: `[string]`\n- Default: `[]`\n\n#### \u003cfont color=\"#FFA500\" \u003eruntimeHelpers\u003c/font\u003e\n\n是否把 helper 方法提取到 `@babel/runtime` 里。\n\n- Type: `boolean`\n- Default: `false`\n\n注：\n\n1. 配置了 `runtimeHelpers`，要在 dependencies 里安装 `@babel/runtime` 依赖\n2. runtimeHelpers 只对 esm 有效\n\n#### \u003cfont color=\"#FFA500\" \u003edisableTypes\u003c/font\u003e\n\n是否禁用类型检测, 将不会生成 d.ts\n\n- Type: `boolean`\n- Default: `false`\n\n#### \u003cfont color=\"#FFA500\" \u003ebeforeReadWriteStream\u003c/font\u003e\n\n编译中 hook, 在没有进行任何处理之前\n\n- Type: `function({ through, gulpIf }):NodeJS.ReadWriteStream`\n- Default: `undefined`\n\n注：\n\n1. 会传入两个参数\n   - `through2` https://github.com/rvagg/through2\n   - `gulp-if` https://github.com/robrich/gulp-if,\n2. 可以直接使用 `gulp` 插件\n\n```js\nexport default {\n  beforeReadWriteStream({ through, gulpIf }) {\n    return through.obj((chunk, _, cb) =\u003e {\n      cb(null, chunk)\n    })\n\n    return gulpLess()\n  }\n}\n```\n\n#### \u003cfont color=\"#FFA500\" \u003eafterReadWriteStream\u003c/font\u003e\n\n编译中 hook, 在进行编译处理之后\n\n- Type: `function({ through, gulpIf }):NodeJS.ReadWriteStream`\n- Default: `undefined`\n\n注：\n\n1. 会传入两个参数,\n   - `through2` https://github.com/rvagg/through2\n   - `gulp-if` https://github.com/robrich/gulp-if,\n2. 可以直接使用 `gulp` 插件\n\n```js\nexport default {\n  beforeReadWriteStream({ through, gulpIf }) {\n    return through.obj((chunk, _, cb) =\u003e {\n      cb(null, chunk)\n    })\n  }\n}\n```\n\n#### \u003cfont color=\"#FFA500\" \u003eafterHook\u003c/font\u003e\n\n编译中 hook, 在进行编译完成之后\n\n- Type: `function():void`\n- Default: `undefined`\n\n#### \u003cfont color=\"#FFA500\" \u003epackages\u003c/font\u003e\n\n在多目录构建中，有可能出现组件间有构建先后的需求 `packages` 允许你自定义 packages 目录下的构建顺序, 当使用`packages`的时候没有在`packages`里面的目录不会进行编译\n\n- Type: `string[]`\n- Default: `[]`\n\n```js\nexport default {\n  packages: ['packagesA', 'packagesB']\n}\n```\n\n注:\n\n1. 子目录的配置文件会继承最外层的配置\n\n#### \u003cfont color=\"#FFA500\" \u003epackageDirName\u003c/font\u003e\n\n- Type: `string`\n- Default: `packages`\n\n#### \u003cfont color=\"#FFA500\" \u003eentry\u003c/font\u003e\n\n编译监听目录\n\n- Type: `string`\n- Default: `src`\n\n#### \u003cfont color=\"#FFA500\" \u003eoutput\u003c/font\u003e\n\n编译输出目录\n\n- Type: `string`\n- Default: `lib`\n\n#### \u003cfont color=\"#FFA500\" \u003elessOptions\u003c/font\u003e\n\n- Type: `{ modifyVars?: Record\u003cstring, any\u003e paths?: string[] plugins?: any[] relativeUrls?: boolean }`\n- Default: `object`\n\n[gulp-less](https://github.com/gulp-community/gulp-less#readme)\n\n#### \u003cfont color=\"#FFA500\" \u003esourcemap\u003c/font\u003e\n\n- Type: `boolean`\n- Default: `false`\n\n基于 [gulp-sourcemaps](https://github.com/gulp-sourcemaps/gulp-sourcemaps)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoy-l%2Fvitx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoy-l%2Fvitx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoy-l%2Fvitx/lists"}