怎么发布 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

引用

相关推荐
Timer@20 分钟前
LangChain 教程 03|快速开始:10 分钟创建第一个 Agent
前端·javascript·langchain
亿元程序员22 分钟前
十年游戏程序员开箱实测:这台显示器,彻底改写了我的游戏开发日常
前端
凉城a23 分钟前
前端性能优化解决方案
前端·性能优化
慧一居士27 分钟前
Zod 功能、使用场景介绍以及对应场景使用示例
前端·vue.js
Timer@27 分钟前
LangChain 教程 02|环境安装:从 0 到 1 搭建开发环境
javascript·人工智能·langchain·前端框架
我命由我1234528 分钟前
React - React 配置代理、搜索案例(Fetch + PubSub)、React 路由基本使用、NavLink
开发语言·前端·javascript·react.js·前端框架·html·ecmascript
The Sheep 202329 分钟前
C# 操作XML
xml·前端·c#
存在的五月雨35 分钟前
Nodejs的一些
前端
l143723326736 分钟前
短剧出海翻译工具测评:同一段素材实测对比
大数据·前端·人工智能
小马_xiaoen39 分钟前
Vue 3 + TS 实战:手写 v-no-emoji 自定义指令,彻底禁止输入框表情符号!
前端·javascript·vue.js