# 开发安装 ## 目录结构 为了满足各种安装场景,我们规定了组件的构建输出规范,你可以依照下面的组件输出目录结构选择需要的安装方式。 ```bash ├─ dist ## umd │ ├─ tdesign.js │ ├─ tdesign.js.map │ ├─ tdesign.min.js │ ├─ tdesign.min.js.map │ ├─ tdesign.css │ ├─ tdesign.css.map │ └─ tdesign.min.css ├─ esm ## esm │ ├─ button │ ├─ style │ └─ index.js │ ├─ button.js │ ├─ button.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ es ## es │ ├─ button │ ├─ style │ ├─ css.js │ ├─ index.css │ └─ index.js │ ├─ button.js │ ├─ button.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ lib ## es │ ├─ button │ ├─ button.js │ ├─ button.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ index.js │ └─ index.d.ts | ├─ ejs ## cjs │ ├─ button │ ├─ button.js │ ├─ button.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ index.js │ └─ index.d.ts │ ├─ LICENSE ├─ CHANGELOG.md ├─ README.md └─ package.json ``` ## 产物说明 ### dist - 打包所有组件代码和样式,分别生成一个 js 与 css 文件 - 兼容现代浏览器,支持服务端渲染 - JS 文件采用 UMD 模块标准 构建 - JS / CSS 文件支持浏览器 script / link 标签 与 主流构建工具(webpack,rollup 等)引入使用 - JS 文件必须生成对应 `.min` 和 `.map` 文件,以便线上资源加载和 debug - 以 common/style/(web|mobile)/index.less 为入口构建 - 在 dist 下生成一份未压缩的 `tdesgin.css` 和 `tdesign.css.map` - 压缩 `tdesgin.css` 生成 `tdesgin.min.css` ### es - 分别编译每个组件的 TS 代码,生成对应的 JS 文件和类型声明文件 - 兼容现代浏览器,支持服务端渲染 - 组件导入/导出方式采用 ES Modules 标准,支持 tree-shaking,es/index.js 中单独导出每个组件,内容同 `src/index.ts` - 组件文件夹下生成 style 目录,存放编译后的 CSS 样式文件 - 组件文件夹下必须包含类型声明文件 `\*.d.ts` - 组件编译后代码用到的 babel runtime helpers 注入到每个组件 - 只编译组件代码,不用编译测试文件和文档文件等 ### esm - 分别编译每个组件的 TS 代码,生成对应的 JS 文件和类型声明文件 - 兼容现代浏览器,支持服务端渲染 - 组件导入/导出方式采用 ES Modules 标准,支持 tree-shaking,esm/index.js 中单独导出每个组件,内容同 `src/index.ts` - 组件文件夹下生成 `style/index.js`,链接未编译的 `less` 样式文件 - 组件文件夹下必须包含类型声明文件 `\*.d.ts` - 组件编译后代码用到的 babel runtime helpers 注入到每个组件 - 只编译组件代码,不用编译测试文件和文档文件等 ### lib - 分别编译每个组件的 TS 代码,生成对应的 JS 文件和类型声明文件 - 兼容现代浏览器,支持服务端渲染 - 组件导入/导出方式采用 ES Modules 标准,支持 tree-shaking,lib/index.js 中单独导出每个组件,内容同 `src/index.ts` - 组件文件夹下不包含任何样式代码,可以结合 dist 目录下 `tdesgin.min.css` 搭配使用 - 组件文件夹下必须包含类型声明文件 `\*.d.ts` - 组件编译后代码用到的 babel runtime helpers 注入到每个组件 - 只编译组件代码,不用编译测试文件和文档文件等 ### ejs - 分别编译每个组件的 TS 代码,生成对应的 JS 文件和类型声明文件 - 兼容现代浏览器,支持服务端渲染 - 组件导入/导出方式采用 CommonJs Modules 标准,`lib/index.js` 中单独导出每个组件,内容同 `src/index.ts` - 组件文件夹下必须包含类型声明文件 `\*.d.ts` - 组件编译后代码用到的 babel runtime helpers 注入到每个组件 - 只编译组件代码,不用编译测试文件和文档文件等 ### (esm|es)/componentName/style - 遍历 common/style/(web|mobile)/componentName/index.less 入口构建每个组件的样式 - 每个组件生成一份 `index.less` 和 `index.css` 放置到 lib/componentName/style/ 下 - component-name/style/ 下生成 index.js,写入 import './index.less'; - component-name/style/ 下生成 css.js,写入 import './index.css'; ### package.json ```javascript { ... "files": [ "es", "esm", "lib", "dist", "LICENSE", "README.md", "CHANGELOG.md" ], // 指定上传到 NPM 上的文件 "sideEffects": [ "dist/*", "site/*", "examples/*", "es/**/style/**", "esm/**/style/**" ], // 指定有副作用的文件,可用于 tree-shaking "main": "lib/index.js", // 指定通用的NPM包入口 "module": "es/index.js", // 指定支持ES Modules构建的NPM包入口 "unpkg": "dist/tdesign.min.js", // 指定 unpkg 入口 "jsdelivr": "dist/tdesign.min.js", // 指定 jsdelivr 入口 "typings": "lib/index.d.ts", // TS 声明 } ``` ## 安装 默认组件包的 main 入口指向 lib/index.js,esm 入口指向 es/index.js 我们推荐使用如 webpack 或 rollup 等支持 tree-shaking 的构建工具,默认只打包你实际使用到的代码 更具体的安装方式需要参考各组件库文档里的说明。