sloth-d2c-figma-plugin 2.0.3-beta46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -0
- package/dist/32a72ba79f2bb430ea9774de296722d1.node +0 -0
- package/dist/core.cjs.js +1 -0
- package/dist/core.cjs.js.LICENSE.txt +686 -0
- package/dist/libX11.6.dylib +0 -0
- package/dist/libXau.6.dylib +0 -0
- package/dist/libXdmcp.6.dylib +0 -0
- package/dist/libXext.6.dylib +0 -0
- package/dist/libXrender.1.dylib +0 -0
- package/dist/libcairo-gobject.2.dylib +0 -0
- package/dist/libcairo.2.dylib +0 -0
- package/dist/libfontconfig.1.dylib +0 -0
- package/dist/libfreetype.6.dylib +0 -0
- package/dist/libfribidi.0.dylib +0 -0
- package/dist/libgdk_pixbuf-2.0.0.dylib +0 -0
- package/dist/libgif.7.2.0.dylib +0 -0
- package/dist/libgio-2.0.0.dylib +0 -0
- package/dist/libglib-2.0.0.dylib +0 -0
- package/dist/libgmodule-2.0.0.dylib +0 -0
- package/dist/libgobject-2.0.0.dylib +0 -0
- package/dist/libgraphite2.3.2.1.dylib +0 -0
- package/dist/libharfbuzz.0.dylib +0 -0
- package/dist/libintl.8.dylib +0 -0
- package/dist/libjpeg.8.3.2.dylib +0 -0
- package/dist/libpango-1.0.0.dylib +0 -0
- package/dist/libpangocairo-1.0.0.dylib +0 -0
- package/dist/libpangoft2-1.0.0.dylib +0 -0
- package/dist/libpcre2-8.0.dylib +0 -0
- package/dist/libpixman-1.0.dylib +0 -0
- package/dist/libpng16.16.dylib +0 -0
- package/dist/librsvg-2.2.dylib +0 -0
- package/dist/libxcb-render.0.0.0.dylib +0 -0
- package/dist/libxcb-shm.0.0.0.dylib +0 -0
- package/dist/libxcb.1.1.0.dylib +0 -0
- package/package.json +84 -0
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Figma Plugin Sample React Hot Reload
|
|
2
|
+
|
|
3
|
+
支持 React(部分)热更新的 Figma 插件 demo
|
|
4
|
+
|
|
5
|
+
## 功能介绍
|
|
6
|
+
|
|
7
|
+
这个 Demo 用于开发 Figma 插件,支持了如下的功能:
|
|
8
|
+
|
|
9
|
+
- [x] React
|
|
10
|
+
- [x] Webpack
|
|
11
|
+
- [x] WebpackDevServer
|
|
12
|
+
- [x] React Hot Reload
|
|
13
|
+
- [x] React Router
|
|
14
|
+
- [x] React Hooks
|
|
15
|
+
- [x] 便捷的消息通信机制
|
|
16
|
+
|
|
17
|
+
更多关于此仓库的介绍,请移步到我的博客文章 [Figma 插件开发浅浅谈](https://banyudu.com/posts/figma-plugin-development-intro.f7472f?v=OKGW6q)。
|
|
18
|
+
|
|
19
|
+
## 使用说明
|
|
20
|
+
|
|
21
|
+
### 安装依赖
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 启动调试
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm run dev
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
调试/打包为Figma插件
|
|
34
|
+
```bash
|
|
35
|
+
pnpm build
|
|
36
|
+
pnpm dev
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
调试/打包为node依赖
|
|
40
|
+
```bash
|
|
41
|
+
pnpm dev:lib:node
|
|
42
|
+
pnpm build:lib:node
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 功能开发
|
|
46
|
+
|
|
47
|
+
#### 目录约定
|
|
48
|
+
|
|
49
|
+
功能开发主要需要修改两处位置。
|
|
50
|
+
|
|
51
|
+
- src/figma: 存储 Figma 沙箱中运行的代码,不可以使用 window / fetch 等各种 api,但是可以访问 figma 文档结构。
|
|
52
|
+
- src/pages: React 开发的页面,和 create-react-app 创建的项目差别不大,可以正常使用 react-router (只能是 memory router) 和 antd 组件库等常用库。
|
|
53
|
+
|
|
54
|
+
#### 内部通信
|
|
55
|
+
|
|
56
|
+
当 pages 和 figma 中需要通信时,需要用到 postMessage 在两个窗口间通信,比较繁琐。
|
|
57
|
+
|
|
58
|
+
我提取了一个帮助工具 `emitToFigma`,可以用于在 pages 中发消息给 figma,并获得其响应。
|
|
59
|
+
|
|
60
|
+
使用方法:
|
|
61
|
+
|
|
62
|
+
首先,在 src/figma 中定义 actions,参见 `src/figma/index.ts`
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// 如果添加了新的文件,需要在上面导入,并在actions中加上相应的变量名
|
|
66
|
+
const actions: Record<string, Record<string, FigmaMessageHandler>> = {
|
|
67
|
+
storage,
|
|
68
|
+
page,
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
然后在相应的文件,如 `src/figma/storage` 中定义方法,如 `get`
|
|
73
|
+
|
|
74
|
+
之后在 `src/pages` 中的任何位置,可以通过 `await emitToFigma('storage.get', params)` 的方式调用此方法并获取响应值。
|
|
75
|
+
|
|
76
|
+
### 打包发布
|
|
77
|
+
|
|
78
|
+
执行命令
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm run pack
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
它会在 `dist` 目录中生成一个可供生产环境使用的 `ui.html`、`ui.js`、`code.js` 文件。
|
|
85
|
+
|
|
86
|
+
然后将 `manifest.json` 等必要的文件与 `dist` 目录一起打包成 `figma-plugin.zip` 文件。
|
|
87
|
+
|
|
88
|
+
之后可以内部分享 `figma-plugin.zip` 文件给其他人(无需发布到市场,但需要用开发者模式导入),或者直接发布到 Figma 插件市场。
|
|
89
|
+
|
|
90
|
+
## 避坑指南
|
|
91
|
+
|
|
92
|
+
Figma 插件,受限于其运行时环境,和普通的前端开发略有不同。
|
|
93
|
+
|
|
94
|
+
主要的区别是有些 API 或者库不再可用,列举如下:
|
|
95
|
+
|
|
96
|
+
### 沙箱环境中的代码可以访问 Figma,不能访问 window 等全局变量和 api
|
|
97
|
+
|
|
98
|
+
`src/figma` 中的代码,运行在沙箱环境中,基本上只能用 Figma 的 api,无法使用大部分的 window / fetch 等 api.
|
|
99
|
+
|
|
100
|
+
### Iframe 中的代码,可以访问 window / fetch 等常见的前端全局变量和 API,但略有不同
|
|
101
|
+
|
|
102
|
+
`src/pages` 中的代码,运行在 iframe 之中,但是它的 src 并不是一个远程地址(也没有 localhost 地址可用),而是一段 dataurl,形如 `data:text/html;base64,` 这样的地址。
|
|
103
|
+
|
|
104
|
+
这就导致它不能正常使用 `BrowserRouter` 中的前进后退等能力,无法使用 `<a>` 标签进行页面导航,而只能使用 `MemoryRouter` 和 `history.push` 这样的内存路由进行页面导航。
|
|
105
|
+
|
|
106
|
+
同时也会导致它不能正常使用 `localStorage` 等存储类的 api,而必须借助 `src/figma` 中的 `figma.clientStorage.getAsync` 和 `figma.clientStorage.setAsync` 等方法进行数据持久化存储。
|
|
107
|
+
|
|
108
|
+
更多原理介绍,请移步到我的博客文章 [Figma 插件开发浅浅谈](https://banyudu.com/posts/figma-plugin-development-intro.f7472f?v=OKGW6q)。
|
|
Binary file
|