怎么发布 React 组件到 NPM - 使用tsdx

用一个工具tsdx写 React 组件:

shell 复制代码
npx tsdx create mylib
cd mylib
yarn start

选择模版的时候

  • basic: 用于一个 TypeScript 包,可以开发任何东西,灵活度高
  • react: 用于开发 React 组件的包,内置了@types,而且有一个基于 Parcel 的调试模块,帮助快速开发
  • react-with-storybook: 与 react 模版相同,但是多内置了 storybook

这里选择第二个 react 模版。

目录结构如下:

shell 复制代码
dist # 编译后的输出目录
example # 开发调试的文件夹
node_modules
package.json
src # 写组件源码
test
tsconfig.json
yarn.lock

想看组件效果,需要同时启动两个命令,一个是项目的实时编译,一个是 example 的调试

shell 复制代码
yarn start # 项目的实时编译,监测代码变更,编译最新版本到dist

# 再启动另一个命令
cd example
yarn install
yarn start # 监测dist变更,重新启动example的内容

如果发现以下报错:

shell 复制代码
...../index.tsx: Invalid Version: undefined

解决方案,这边简单将example/package.json的 parcel 更换版本

shell 复制代码
# example/package.json
#  本来
"parcel": "^1.12.3",
#  改成
"parcel": "1.12.3",

重新启动,好使了,改下 src 里面的内容,也及时变化了,发现有一定的延迟

加上 css

如果将上面的组件,引入 css 文件,就发现报错啦

shell 复制代码
✖ Failed to compile
Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)

默认 tsdx 不支持 css,这边需要配置下,安装相应插件。

shell 复制代码
npm i -D rollup-plugin-postcss postcss

新建配置文件tsdx.config.js

js 复制代码
const postcss = require('rollup-plugin-postcss');

module.exports = {
  rollup(config, options) {
    config.plugins.push(
      // @ts-ignore
      postcss({
        inject: true,
        extract: !!options.writeMeta,
      })
    );
    return config;
  },
};

重新运行下两个yarn start,样式生效了!

支持 less 和模块化

如果是 less 文件的话,同样需要插件处理

shell 复制代码
npm install less postcss-modules --save-dev
js 复制代码
const postcss = require('rollup-plugin-postcss');
module.exports = {
  rollup(config, options) {
    config.plugins.push(
      // @ts-ignore
      postcss({
        inject: true,
        extract: !!options.writeMeta,
        modules: true, // 使用css modules
        // namedExport: true, // 类名导出
        camelCase: true, // 支持驼峰
        // sass: true, // 是否使用sass
        // less:true,
        // autoModules:true,
        // namedExports(name) {
        //   // Maybe you simply want to convert dash to underscore
        //   return name.replace(/-/g, '_')
        // }
      })
    );
    return config;
  },
};
s;

因为在 ts 环境下,需要一个声明文件,src 下创建less.config.ts

js 复制代码
declare module '*.less' {
  const content: any;
  export default content;
}

这样less文件也可支持啦!

发布

根目录运行

shell 复制代码
yarn build
# nrm ls
# nrm use npm
npm login
npm publish

引用

相关推荐
rockey6272 小时前
C#脚本引擎之AScript与Jurassic、Jint对比
javascript·c#·.net·js·script·动态脚本
Profile排查笔记3 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
lzhdim3 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
denggun123453 小时前
yield
前端·数据库·python
前端snow3 小时前
ai agent -- prompt汇总
前端
muddjsv5 小时前
前端性能优化实战:从加载到渲染的全面提速指南
前端·性能优化
deli0070076 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
guanguan0_06 小时前
PageProxy:页面维度接口地图 + 一键场景切换
前端·ai编程·请求代理·proxy工具
liangshanbo12156 小时前
虚拟列表深度面试题整理
java·开发语言·前端
IT_陈寒7 小时前
Redis内存警告竟是因为这个不起眼的配置项
前端·人工智能·后端