# package-cli-service **Repository Path**: SimonFighter/package-cli-service ## Basic Information - **Project Name**: package-cli-service - **Description**: 构建、打包、发布、运行测试 package;支持自动处理version、自动生成CHANGELOG,集成typescript、husky、eslint、commitlint、storybook、analyzer等;支持构建vue、react、jslib等web前端package - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-05-09 - **Last Updated**: 2024-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # package-cli-service ## 介绍 CLI 服务 (`package-cli-service`) 是一个开发环境依赖。它是一个 npm 包,局部安装在每个 `create-package-tools` 创建的项目中。 CLI 服务是构建于[rollup](https://rollupjs.org/)、 [webpack](http://webpack.js.org/) 和 [webpack-dev-server](https://github.com/webpack/webpack-dev-server) 之上的。它包含了: - 一个针对绝大部分 package 优化过的内部的 rollup 配置; - 项目内部的 `package-cli-service` 命令,提供 `serve-example`、`build-example`、`lint`、`fix`、`analyzer`、`build` 、`pub` 、`serve-storybook`、`build-storybook` 命令。 如果你熟悉 [@vue/cli-service](https://cli.vuejs.org/zh/guide/cli-service.html) 的话,`package-cli-service` 实际上大致等价于 `@vue/cli-service`,尽管功能集合不一样。但`package-cli-service` 专注于为 package 提供完整的工作流。
## 使用命令 `package-cli-service` 安装了一个名为 `package-cli-service` 的命令。你可以在 npm scripts 中以 `package-cli-service`、或者从终端中以 `./node_modules/.bin/package-cli-service` 访问这个命令。 这是你使用默认 preset 的项目的 `package.json`: ```json "scripts": { "serve-example": "package-cli-service serve-example", "build-example": "package-cli-service build-example", "lint": "package-cli-service lint", "fix": "package-cli-service fix", "analyzer": "package-cli-service analyzer", "build": "package-cli-service build", "pub": "package-cli-service pub", "alpha": "package-cli-service pub --npm-tag=alpha", "beta": "package-cli-service pub --npm-tag=beta", "prepublishOnly": "package-cli-service prepublish", "serve-storybook": "package-cli-service serve-storybook -p 6006", "build-storybook": "package-cli-service build-storybook", "all-changelogs": "package-cli-service generate-all-changelogs" }, ``` 你可以通过 npm 或 Yarn 调用这些 script: ```bash npm run pub # OR yarn pub ``` 如果你可以使用 [npx](https://github.com/npm/npx) (最新版的 npm 应该已经自带),也可以直接这样调用命令: ```bash npx package-cli-service pub ```
### package-cli-service pub ``` 用法:package-cli-service serve 选项: --npm-tag=alpha 发布 alpha 版本 --npm-tag=beta 发布 beta 版本 --config 自定义配置文件 --skip-git-status 跳过git status 检测 --skip-compile 跳过编译 --skip-append-changelog 跳过向 README.md 写入更新日志 --skip-robot 跳过机器人消息推送 --skip-publish 跳过发布 --custom-version 自定义版本号 --skip-fetch-tags 跳过拉取 git tags ``` `package-cli-service pub` 命令会发布组件。它是 `package-cli-service ` 最重要最核心的功能,该命令集成了以下几个工作流: > **package-cli-service pub 工作流** > > 1. 更新 version > 2. 自动生成changelog > 3. 编译打包 > 4. 发布 > 5. 机器人消息推送
### package-cli-service serve-example ``` 用法:package-cli-service serve-example ``` `package-cli-service serve-example` 命令会为 `example` 启动一个开发服务器 (基于 [webpack-dev-server](https://github.com/webpack/webpack-dev-server)) 并附带开箱即用的模块热重载 (Hot-Module-Replacement)。
### package-cli-service build-example ``` 用法:package-cli-service build-example ``` `package-cli-service build-example` 命令会打包 `example` 项目
### package-cli-service lint ``` 用法:package-cli-service lint ``` `package-cli-service lint` 命令会使用 `eslint` 默认检测 `src`、`example` 代码中的问题。 你也可以自定义你要检测的文件,只需要这样做 `package-cli-service lint ./components1 ./components2`
### package-cli-service fix ``` 用法:package-cli-service fix ``` `package-cli-service fix` 命令会使用 `eslint` 默认修复 `src`、`example` 代码中的问题。 你也可以自定义你要检测的文件,只需要这样做 `package-cli-service fix ./components1 ./components2`
### package-cli-service analyzer ``` 用法:package-cli-service analyzer ``` `package-cli-service analyzer` 命令会使用 `rollup-plugin-visualizer` 来可视化并分析组件包,以查看哪些模块占用了空间。
### package-cli-service build ``` 用法:package-cli-service build 选项: --config 自定义配置文件 --watch 查看bundle中的文件并根据更改重新构建 ``` `package-cli-service build` 命令只会编译打包组件,不进行发布
### package-cli-service serve-storybook ``` 用法:package-cli-service serve-storybook 选项: --port 指定 storybook 运行的端口 ``` `package-cli-service serve-storybook` 命令会启动 `storybook`,提供可视化组件及组件文档
### package-cli-service build-storybook ``` 用法:package-cli-service build-storybook ``` `package-cli-service build-storybook` 命令会编译打包storybook,输出一个静态资源`dist-storybook`,你可以将之发布在你的组件在线文档中
### package-cli-service prepublish ``` 用法:package-cli-service prepublish ``` `package-cli-service prepublish` 命令是组件包发布前的的拦截器,该命令会**阻止**非使用 `package-cli-service` 进行发布组件包。 如使用 `npm publish` 将会被阻止。
### generate-all-changelogs ``` 用法:package-cli-service generate-all-changelogs ``` `package-cli-service generate-all-changelogs` 命令是给组件包生成所有更新日志。
### 查看所有的可用命令 你可以运行以下命令查看所有命令: ```bash npx package-cli-service help ``` 你也可以这样学习每个命令可用的选项: ```bash npx package-cli-service help [command] ```
## 配置参考 package-cli-service.config.js ### input - 包的入口点 - Type: `string | string []| { [entryName: string]: string }` - Default: `src/index.js` ### outputDir - 定义输出 package 所创建的 *bundle* 的目录名 - Type: `string` - Default: `dist` ### cjsDir - 定义输出 commonjs 所创建的 *bundle* 的目录名 - Type: `string` - Default: `lib` ### esDir - 定义输出 ES module 所创建的 *bundle* 的目录名 - Type: `string` - Default: `es` ### umdDir - 定义输出 umd 所创建的 *bundle* 的目录名 - Type: `string` - Default: `umd` ### output.umd - 是否输出 umd 格式的 *bundle* - Type: `boolean` - Default: `false` ### output.name - 对于iife/umd包来说是必需的,在这种情况下,它是代表你的包的全局变量名 - Type: `string` - Default: `none` ### output.globals - 指定umd/iife包中外部导入所需的 `id: variableName` 对 - Type: `{ [id: string]: string }| ((id: string) => string)` - Default: `none` - ### output.plugins - 该选项用于指定输出插件,这是设置插件的唯一入口 - Type: `OutputPlugin | (OutputPlugin | void)[]` ### external - 从输出的 bundle 中排除依赖,**防止**将某些 `import` 的包(package)**打包**到 bundle 中,而是在运行时(runtime)再去从外部获取这些*扩展依赖(external dependencies)*。 - Type: `(string | RegExp)[]| RegExp| string| (id: string, parentId: string, isResolved: boolean) => boolean` - Default: `none` ### eslintOptions - [@rollup/plugin-eslint](https://www.npmjs.com/package/@rollup/plugin-eslint) 的options。一个Rollup插件,它用于lint入口点和所有ESLint导入的文件 - Type: `object` ### externalsOptions - [rollup-plugin-node-externals](https://www.npmjs.com/package/rollup-plugin-node-externals) 的options。一个Rollup插件,自动将NodeJS内置模块声明为外部模块。也处理npm dependencies, devDependencies, peerDependencies and optionalDependencies - Type: `object` ### aliasOptions - [@rollup/plugin-alias](https://www.npmjs.com/package/@rollup/plugin-alias) 的options。一个Rollup插件,创建 `import` 或 `require` 的别名,来确保模块引入变得更简单 - Type: `object` - Default: - entries: `@ => src` - customResolver: ```js resolve({ extensions: ['.js', '.ts', '.jsx', '.tsx', '.less', '.scss', '.mjs'] }) ``` ### resolveOptions - [@rollup/plugin-node-resolve](https://www.npmjs.com/package/@rollup/plugin-node-resolve) 的options。一个Rollup插件,可以让 Rollup 查找到外部模块 - Type: `object` - Default: - extensions: `['.js', '.ts', '.jsx', '.tsx', '.less', '.scss', '.mjs']` ### commonjsOptions - [@rollup/plugin-commonjs](https://www.npmjs.com/package/@rollup/plugin-commonjs) 的options。一个Rollup插件,目前,NPM上的大多数包都输出为CommonJS模块。`@rollup/plugin-commonjs` 可以在Rollup处理CommonJS之前将它们转换为ES2015 - Type: `object` ### urlOptions - [@rollup/plugin-url](https://www.npmjs.com/package/@rollup/plugin-url) 的options。一个Rollup插件,可以导入JPG, PNG, GIF, SVG和WebP文件。 - Type: `object` - Default: ```js { fileName: '[dirname][name][extname]', sourceDir: path.join(__dirname, 'src') } ``` ### typescriptOptions - [rollup-plugin-typescript2](https://www.npmjs.com/package/rollup-plugin-typescript2) 的options。带有编译器错误的typescript Rollup插件 - Type: `object` ### babelOptions - [@rollup/plugin-babel](https://www.npmjs.com/package/@rollup/plugin-babel) 的options。在rollup里应用 babel 解析ES6的桥梁 - Type: `object` - Default: ```js { extensions: [ ...DEFAULT_EXTENSIONS, ".ts", ".tsx", ], babelHelpers: "runtime", exclude: "node_modules/**", presets: [ [ "@babel/preset-env", { modules: false, useBuiltIns: "usage", corejs: 3, }, ], "@babel/preset-react", "@babel/preset-typescript" ], plugins: ["@babel/plugin-transform-runtime"], } ``` ### postcssOptions - [rollup-plugin-postcss](https://www.npmjs.com/package/rollup-plugin-postcss) 的options。Rollup和PostCSS之间的无缝集成。 - Type: `object` - Default: ```js { // extract: true, // minimize: true, ...postcssOptions, plugins: [ autoprefixer(), postcssUrl({ url: "inline", // enable inline assets using base64 encoding maxSize: 100, // maximum file size to inline (in kilobytes) fallback: "copy", includeUriFragment: true, // 在 URI 末尾包含片段标识符 ignoreFragmentWarning: true, // 内联带有片段的 SVG URL 时不发出警告 optimizeSvgEncode: true, // 减小内联 svg 的大小(IE9+,Android 3+) }), ], use: { less: { plugins: [new npmImport({ prefix: '~' })], // 使用带~前缀引入less文件 javascriptEnabled: true }, } } ``` ### stripOptions - [@rollup/plugin-strip](https://www.npmjs.com/package/@rollup/plugin-strip) 的options。一个Rollup插件,在打包时从代码中删除 `debugger`、`assert.equal` 和 `console.*` - Type: `object` - Default: ```js { labels: ["unittest"], } ``` ### terserOptions - [@rollup/plugin-terser](https://www.npmjs.com/package/@rollup/plugin-terser) 的options。一个Rollup插件,进行代码压缩 - Type: `object` ### deleteOptions - [rollup-plugin-delete](https://www.npmjs.com/package/rollup-plugin-delete) 的options。一个Rollup插件,当你想在打包之前清理dist或其他文件夹和文件时,这个插件是有用的 - Type: `object` - Default: - ```js { targets: `${outputDir}/*`, } ``` ### visualizerOptions - [rollup-plugin-visualizer](https://www.npmjs.com/package/rollup-plugin-visualizer) 的options。一个Rollup插件,可视化并分析Rollup包,以查看哪些模块占用了空间。 - Type: `object` - Default: ```js { filename: `./dist-visualizer/stats.html`, title: `${packageJson.name} visualizer`, open: true, template: "treemap", gzipSize: true, } ``` ### copyOptions - [rollup-plugin-copy](https://www.npmjs.com/package/rollup-plugin-copy) 的options。一个Rollup插件,打包时复制文件和文件夹 - Type: `object` ### copyToDistExt - 需要在打包时复制到outputDir目录的文件后缀 - Type: `string[]` - Default: `['.less']` ### storybookConfig - storybook 配置 - Type: `object` - configDir: - .storybook 目录地址 - Type: `relative path` - outputDir: - build-storybook 输出目录 - Type: `string` - Default: `dist-storybook` - robotDetailUrl: - 详情地址 - Type: `string` - Default: `https://www.npmjs.com/package/${packageName}` ### robotConfig - package 发布|删除|废弃 时推送飞书机器人消息 - Type: `object` - robotUrl: - 推送地址 - Type: `string` - packageName: - 包名 - Type: `string` - Default: `package.json name` - robotDetailUrl: - 详情地址 - Type: `string` - Default: `https://www.npmjs.com/package/${packageName}`