package-cli-service,为构建发布npm包提供完整的工作流

package-cli-service

在这里插入图片描述

介绍

package-cli-service 是一个开发环境依赖。它是一个 npm 包,局部安装在每个 create-package-tools 创建的项目中。

package-cli-service 是构建于 rollup 和 webpack 之上的。它包含了:

  • 一个针对绝大部分 package 优化过的内部的 rollup 配置;
  • 项目内部的 package-cli-service 命令,提供 serve-examplebuild-examplelintfixanalyzerbuildpubserve-storybookbuild-storybook 命令。

如果你熟悉 @vue/cli-service 的话,package-cli-service 实际上大致等价于 @vue/cli-service,尽管功能集合不一样。并且package-cli-service 专注于为构建发布 npm包 提供完整的工作流。


使用命令

package-cli-service 安装了一个名为 package-cli-service 的命令。你可以在 npm scripts 中以 package-cli-service、或者从终端中以 ./node_modules/.bin/package-cli-service 访问这个命令。

这是你使用默认 preset 的项目的 package.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:

npm run pub
# OR
yarn pub

如果你可以使用 npx (最新版的 npm 应该已经自带),也可以直接这样调用命令:

npx package-cli-service pub

package-cli-service pub

用法:package-cli-service serve

选项:

  --npm-tag=alpha   				发布 alpha 版本
  --npm-tag=beta					发布 beta 版本
  --config   				   		自定义配置文件
  --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) 并附带开箱即用的模块热重载 (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 默认检测 srcexample 代码中的问题。

你也可以自定义你要检测的文件,只需要这样做 package-cli-service lint ./components1 ./components2


package-cli-service fix

用法:package-cli-service fix

package-cli-service fix 命令会使用 eslint 默认修复 srcexample 代码中的问题。

你也可以自定义你要检测的文件,只需要这样做 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 命令是给组件包生成所有更新日志。


查看所有的可用命令

你可以运行以下命令查看所有命令:

npx package-cli-service help

你也可以这样学习每个命令可用的选项:

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 的options。一个Rollup插件,它用于lint入口点和所有ESLint导入的文件

  • Type: object

externalsOptions

  • rollup-plugin-node-externals 的options。一个Rollup插件,自动将NodeJS内置模块声明为外部模块。也处理npm dependencies, devDependencies, peerDependencies and optionalDependencies

  • Type: object

aliasOptions

  • @rollup/plugin-alias 的options。一个Rollup插件,创建 importrequire 的别名,来确保模块引入变得更简单

  • Type: object

  • Default:

    • entries: @ => src

    • customResolver:

      resolve({
        extensions: ['.js', '.ts', '.jsx', '.tsx', '.less', '.scss', '.mjs']
      })
      

resolveOptions

  • @rollup/plugin-node-resolve 的options。一个Rollup插件,可以让 Rollup 查找到外部模块

  • Type: object

  • Default:

    • extensions: ['.js', '.ts', '.jsx', '.tsx', '.less', '.scss', '.mjs']

commonjsOptions

  • @rollup/plugin-commonjs 的options。一个Rollup插件,目前,NPM上的大多数包都输出为CommonJS模块。@rollup/plugin-commonjs 可以在Rollup处理CommonJS之前将它们转换为ES2015

  • Type: object

urlOptions

  • @rollup/plugin-url 的options。一个Rollup插件,可以导入JPG, PNG, GIF, SVG和WebP文件。

  • Type: object

  • Default:

    {
      fileName: '[dirname][name][extname]',
      sourceDir: path.join(__dirname, 'src')
    }
    

typescriptOptions

  • rollup-plugin-typescript2 的options。带有编译器错误的typescript Rollup插件

  • Type: object

babelOptions

  • @rollup/plugin-babel 的options。在rollup里应用 babel 解析ES6的桥梁

  • Type: object

  • Default:

    {
      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 的options。Rollup和PostCSS之间的无缝集成。

  • Type: object

  • Default:

    {
      plugins: [
        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+)
        }),
      ],
    }
    

stripOptions

  • @rollup/plugin-strip 的options。一个Rollup插件,在打包时从代码中删除 debuggerassert.equalconsole.*

  • Type: object

  • Default:

    {
      labels: ["unittest"],
    }
    

terserOptions

  • @rollup/plugin-terser 的options。一个Rollup插件,进行代码压缩

  • Type: object

deleteOptions

  • rollup-plugin-delete 的options。一个Rollup插件,当你想在打包之前清理dist或其他文件夹和文件时,这个插件是有用的

  • Type: object

  • Default:

  • {
      targets: `${outputDir}/*`,
    }
    

visualizerOptions

  • rollup-plugin-visualizer 的options。一个Rollup插件,可视化并分析Rollup包,以查看哪些模块占用了空间。

  • Type: object

  • Default:

    {
      filename: `./dist-visualizer/stats.html`,
      title: `${packageJson.name} visualizer`,
      open: true,
      template: "treemap",
      gzipSize: true,
    }
    

copyOptions

  • 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}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10443.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

013 - C++引用

本期我们要讲的是 C 中的引用。 上期我们讨论了指针,如果你没有看过那期内容,你一定要回去看看,因为引用实际上只是指针的扩展,你至少需要在基本层面上理解指针是如何工作的,然后才能继续学习本期的内容,本…

MySQL索引数据结构入门

之前松哥写过一个 MySQL 系列,但是当时是基于 MySQL5.7 的,最近有空在看 MySQL8 的文档,发现和 MySQL5.7 相比还是有不少变化,同时 MySQL 又是小伙伴们在面试时一个非常重要的知识点,因此松哥打算最近再抽空和小伙伴们…

Golang数据类型比较

直接使用比较的情况 分类说明是否能比较说明基本类型整型( int/uint/int8/uint8/int16/uint16/int32/uint32/int64/uint64/byte/rune等)浮点数( float32/float64)复数类型( complex64/complex128)字符串&a…

Linux查看端口

目录 1.查看已知端口的使用情况 2.查看所有端口的占用情况 3.查看占用端口的程序的进程号 4.杀死进程号 1.查看已知端口的使用情况 #例:8080 可使用命令: netstat -anp | grep 8080 结果如下: 还可以使用这条命令: netstat -tln | grep 8080 结果如下: 区别:第一条命令后面显示…

NumPy 秘籍中文第二版:十二、使用 NumPy 进行探索性和预测性数据分析

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们涵盖以下秘籍: 探索气压探索日常气压范围研究年度气压平均值分析最大可见度用自回归模型预测气压使用移动平均模型预测气压研究年…

爱智EdgerOS之深入解析离线下载任务

一、需求分析 在日常使用计算机的过程中,看到喜欢的资源不可避免地想把它下载到我们的设备上保存下来,比如图片,音视频资源,文档资源等,基于这种应用场景,现在来看看在爱智设备上可以如何实现呢&#xff1…

76-TCP协议,UDP协议以及区别

TCP协议,UDP协议,SCTP协议一.TCP协议1.什么是TCP协议2.TCP协议的特点3.TCP头部结构4.TCP状态转移5.TCP超时重传二.UDP协议1.什么是UDP协议2.UDP协议的特点三.TCP和UDP的区别一.TCP协议 1.什么是TCP协议 TCP(Transmission Control Protocol)协议即为传输控制协议,是一种面向连…

2023-04-12 面试中常见的数组题目

数组中的问题其实最常见 通过基础问题,掌握写出正确算法的“秘诀”巧妙使用双索引技术,解决复杂问题对撞指针- 滑动窗口 1 从二分查找法看如何写出正确的程序 本节学习重点:处理边界问题! 1.确定边界范围方法,先用区…

微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

权限认证-分布式session替代方案 前面我们了解了Gateway组件的过滤器,这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。 1、传统单应用的用户鉴权 从我们开始学JavaEE的时候,就被洗脑式灌输了一种权限验证的标准做法,…

Elasticsearch:集群管理的一些建议

在之前的文章 “Elasticsearch:集群管理” ,我们对集群管理做了一些介绍。在今天的文章中,我们接着来聊一下有关配置的方面的问题。这在很大程度上取决于你的用例,是索引还是搜索繁重。 我们将在这里讨论在集群设置方面我们需要关…

Leetcode.130 被围绕的区域

题目链接 Leetcode.130 被围绕的区域 mid 题目描述 给你一个 m x n的矩阵 board,由若干字符 X和 O,找到所有被 X围绕的区域,并将这些区域里所有的 O用 X填充。 示例 1: 输入:board [[“X”,“X”,“X”,“X”],[“X…

「Cpolar」使用Typecho搭建个人博客网站【内网穿透实现公网访问】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

在 Python 中计算两个数字之间的百分比

要计算两个数字之间的百分比,请将一个数字除以另一个数字,然后将结果乘以 100,例如 (30 / 75) * 100。这显示第一个数字占第二个数字的百分比。 在示例中,30 是 75 的 40%。 def is_what_percent_of(num_a, num_b):return (num_a…

基于SVG的HMI组件

人机界面是自动化领域不可或缺重要组成部分。人机界面系统的设计看上去并没有太大的技术门槛,但是设计一个HMI系统的工作量是巨大的,如果你没有足够的耐心和精力是难以完成一个通用HMI系统的。构建UI控件库就是一个似乎永远完不成的事情,用户…

Halo博客建站实战以及问题汇总

目录 简介 特性 快速开始 安装步骤 环境准备 Docker-compose方式部署 问题汇总 mac端无法访问页面 页面登录提示账号密码错误 重装注意点 资料 官方文档 简介 Halo 强大易用的开源建站工具 特性 代码开源 我们的所有代码开源在 GitHub 上且处于积极维护状态&…

《分解因数》:质因数分解

目录 一、题目&#xff1a; 二、思路&#xff1a; 三、代码&#xff1a; 一、题目&#xff1a; 分解因数 《分解因数》题目链接 所谓因子分解&#xff0c;就是把给定的正整数a&#xff0c;分解成若干个素数的乘积&#xff0c;即 a a1 a2 a3 ... an,并且 1 < a1…

HCIA第二次笔记

目录 OSI/RM七层参考模型——开放式的系统互联参考模型 核心——分层 TCP/IP模型——TCP/IP协议簇 应用层 应用层协议 封装与解封装 传输层 TCP协议和UDP协议的区别 TCP的报文 TCP的三次握手 TCP的四次挥手 TCP的四种可靠传输机制 OSI/RM七层参考模型——开放式的系…

[目标识别-论文笔记]Object Detection in Videos by Short and Long Range Object Linking

文章标题&#xff1a;2018_Cite13_Tang——Object Detection in Videos by Short and Long Range Object Linking 这篇论文也被叫做“2019_Cite91_TPAMI_Tang——Object Detection in Videos by High Quality Object Linking” 如果这篇博客对你有帮助&#xff0c;希望你 点赞…

学生信息管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87673902 更多系统资源库…

【设计模式】如何在业务开发中使用适配器模式?

文章目录前言适配器模式定义通用代码实现适用场景案例场景分析一坨坨代码实现适配器模式重构总结前言 适配器模式&#xff08;Adapter Pattern&#xff09;&#xff1a;将一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个…