开发组件

本章将要介绍如何使用 Modern.js Module 开发组件项目。

初始化项目

  1. 推荐使用 @modern-js/create 命令来初始化一个 npm 项目。
交互式问题
npx @modern-js/create@latest components-project

? 请选择你想创建的工程类型:Npm 模块
? 请填写项目名称:components-demo
? 请选择开发语言:TS
? 请选择包管理工具:pnpm
  1. 初始化的目录结构如下:
.
├── README.md
├── node_modules/
├── dist/
├── modern.config.ts
├── package.json
├── pnpm-lock.yaml
├── src
│   ├── index.ts
│   └── modern-app-env.d.ts
└── tsconfig.json
  1. 最后修改 ./src/index.ts 文件后缀和内容如下,就完成了组件项目的初始化。
./src/index.tsx
export default () => {
  return <div>hello world</div>;
};

使用 Storybook 调试代码

请参考 「使用 Storybook」 来使用 Storybook 调试代码。

开发样式

接下来我们可以给组件添加样式。

目前支持开发样式的能力有:

  • CSS/PostCSS
  • Less
  • Scss/Sass
  • Tailwind CSS
  • CSS Modules

CSS/PostCSS

Modern.js Module 支持 PostCSS,并且内置了以下 PostCSS 插件:

因此我们可以在项目中创建 .css 文件,并且可以直接在 css 文件中使用这些插件提供的语法支持和能力。

  • 源代码:
./src/index.css
a,
b {
  color: red;

  /* "&" comes first */
  & c,
  & d {
    color: white;
  }

  /* "&" comes later, requiring "@nest" */
  @nest e & {
    color: yellow;
  }
}
  • CSS 产物:
./dist/es/index.css
a,
b {
  color: red;
}
a c,
b c,
a d,
b d {
  color: white;
}
e a,
e b {
  color: yellow;
}

Less

Modern.js Module 支持使用 Less 开发样式。

目前内置的 Less 版本为 v4.1.3

  • 源代码:
./src/common.less
@bg: black;
@bg-light: boolean(luma(@bg) > 50%);

div {
  background: @bg;
  color: if(@bg-light, black, white);
}
  • Less 产物:
./dist/es/common.css
div {
  background: black;
  color: white;
}

Sass/Scss

Modern.js Module 支持使用 Scss/Sass 开发样式。

目前内置的 Sass 版本为 v1.54.4

  • 源代码:
./src/common.sass
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}
  • Sass 产物:
./dist/es/common.css
body {
  font: 100% Helvetica, sans-serif;
  color: #333;
}

Tailwind CSS

请参考 「使用 Tailwind CSS」 来了解相关用法。

CSS Modules

Modern.js Module 支持使用 CSS Module 开发样式。默认情况下会将以下文件识别为 CSS Module 文件:

  • .module.css
  • .module.less
  • .module.scss
  • .module.sass

如果需要对 CSS Modules 进行配置,可以查看以下 API:

下面是一个代码示例:

./src/index.tsx
import style from './index.module.css';

export default () => {
  return <div className={style.btn}>hello world</div>;
};
./src/index.module.css
.btn {
  color: blue;
}

配置构建产物

根据组件项目使用的多数场景,推荐使用 npm-component 构建预设。该预设得到的产物目录结构为:

.
├── dist
│   ├── es
│   ├── lib
│   └── types
  • ./dist/es: 包含了支持 es6 语法的 ES modules 格式的 bundleless 产物。
  • ./dist/lib: 包含了支持 es6 语法的 CommonJS 格式的 bundleless 产物。
  • ./dist/types: 包含了类型文件。

如果对使用语法支持有要求,可以手动配置 buildPreset,并且支持在 npm-component 基础上增加后缀的方式修改支持的语法:

export default defineConfig({
  buildPreset: 'npm-component-es2019',
});

如果对构建产物目录结构有特殊需求,则可以使用 buildConfig API,可以通过以下文档来了解使用方式:

测试组件

关于如何对组件进行测试,可以参考 「测试项目」

发布组件

推荐使用 Modern.js Module 提供的版本发布功能,可以参考 「版本管理与发布」