@canva/app-scripts

中文文档
1.2.0发布于 2026/11/09SEE LICENSE IN LICENSE.mdTypeScriptESM + CJS近 30 天下载 4.1万

为 Canva Apps 构建脚本和捆绑器配置

中文使用文档
文档目录19 节
  1. 安装
  2. 配置
  3. 基本配置
  4. Bundler 选择
  5. 自定义 Bundler
  6. 后端
  7. Dev 服务器
  8. 翻译
  9. 环境变量
  10. 配置优先
  11. 设计哲学
  12. CLI 命令
  13. dev
  14. build
  15. extract-translations
  16. 全球CLI选项
  17. 更改日志
  18. 捐款
  19. 许可证

@ canva/ app- crip

为 Canva Apps 构建脚本.

@canva/app-scripts 设计用于通过 坎瓦语CLI数字 : canva apps start 财务报告和审定财务报表 canva apps build 是您运行和构建应用程序的推荐方式。 更喜欢直接处理包裹? 自己买的 CLI 命令 aPI也为你服务.

安装

npm install -D @canva/app-scripts

有个没有用的 Canva App @canva/app-scripts 还没有? 你可能有一个 webpack.config.ts (单位:千美元) scripts/start/ 根部有跑动 移徙指南 用来开关.

配置

创建可选 canva-app.config.ts 文件在您的工程根中以覆盖默认值( e).js, (中文(简体) ), .mjs, (中文(简体) ), .cjs, (中文(简体) ), .mts,以及 .cts 也得到支持; 建议类型脚本 :

基本配置

import { defineConfig } from "@canva/app-scripts";

export default defineConfig({
  entry: "./src/index.tsx",
});

Bundler 选择

默认, @canva/app-scripts 用途 建设 作为捆绑者。 您可以明确选择捆绑器 :

import { defineConfig } from "@canva/app-scripts";

export default defineConfig({
  bundler: "rsbuild", // Default, can be omitted
  entry: "./src/index.tsx",
});

Bundler 支持 :

  • rsbuild - 默认捆绑器
  • webpack - 支持的替代办法

自定义 Bundler

使用 config 函数可自定义基础捆绑器配置。 调用器每捆绑键入,所以 bundler 财务报告和审定财务报表 config 一起出行,配置类型来源于各捆绑者自己的包(@rsbuild/core, (中文(简体) ), webpack) (中文(简体) ).

Rsbuild( 默认)

import { defineConfig } from "@canva/app-scripts";
import type { RsbuildContext } from "@canva/app-scripts";
import type { RsbuildConfig } from "@rsbuild/core";

export default defineConfig({
  config: (rsbuildConfig: RsbuildConfig, { mode }: RsbuildContext) => {
    // Disable source maps for production builds
    if (mode === "production") {
      rsbuildConfig.output = { ...rsbuildConfig.output, sourceMap: false };
    }
    return rsbuildConfig;
  },
});

网络软件包

import { defineConfig } from "@canva/app-scripts";
import type { WebpackContext } from "@canva/app-scripts";
import type { Configuration } from "webpack";
import path from "path";

export default defineConfig({
  bundler: "webpack",
  config: (webpackConfig: Configuration, { mode }: WebpackContext) => {
    // Add SVG loader - import SVGs as React components
    webpackConfig.module?.rules?.push({
      test: /\.svg$/,
      issuer: /\.[jt]sx?$/,
      use: [
        {
          loader: "@svgr/webpack",
          options: {
            svgoConfig: {
              plugins: [{ name: "removeViewBox", active: false }],
            },
          },
        },
      ],
    });

    // Add path aliases for cleaner imports
    webpackConfig.resolve = {
      ...webpackConfig.resolve,
      alias: {
        ...webpackConfig.resolve?.alias,
        "@components": path.resolve(__dirname, "src/components"),
        "@assets": path.resolve(__dirname, "src/assets"),
      },
    };

    // Enhanced source maps for development
    if (mode === "development") {
      webpackConfig.devtool = "eval-source-map";
    }

    return webpackConfig;
  },
});

说明: 自定义加载器喜欢 @svgr/webpack 必须单独安装:

npm install --save-dev @svgr/webpack

这个 config 函数接收 :

  • 基础捆绑器配置( E)RsbuildConfig 从 @rsbuild/core,或 Configuration 从 webpack(中文(简体) )
  • context - 与 mode (单位:千美元)"development" 或者说 "production"(中文(简体) )

后端

如果你的应用程序有一个后端,设置 backend 与 Dev 服务器一起运行。 它运行在有TypeScript支持的节点下,后端崩溃将dev服务器撕下. 任意后端配置( 偶数) {}) 使之得以实现.

import { defineConfig } from "@canva/app-scripts";

export default defineConfig({
  entry: "./src/index.tsx",
  backend: true, // runs backend/server.ts
});

通过一个对象来覆盖默认值 :

选项说明默认
entry后端条目,相对于工程根.backend/server.ts
port端口后端监听. 倒计时 CANVA_BACKEND_PORT。 。 。 .3001
host后端托管已构建的应用程序呼叫. 倒计时 CANVA_BACKEND_HOST。 。 。 .—— 说
tunnel通过公共的HTTPS隧道将后端曝光. 被击倒 --tunnel。 。 。 .false
export default defineConfig({
  backend: { entry: "./api/main.ts", port: 3100 },
});

Dev 服务器

可选的dev-server选项. CLI 旗帜和环境变量在运行时覆盖这些.

选项说明默认
port前端德夫服务器端口. 被击倒 --override-frontend-port。 。 。 .8080
https在HTTPS前端服务. 被击倒 --use-https。 。 。 .false
export default defineConfig({
  devServer: { port: 9000, https: true },
});

翻译

可选配置 extract-translations。 。 。 .

选项说明默认
outputDir写入已提取信件的目录 .dist
outputFile输出文件名( 没有目录段) .messages_en.json
patternGlob 用于源文件扫描 .src/**/*.{ts,tsx}
export default defineConfig({
  extractTranslations: { outputDir: "i18n", pattern: "app/**/*.tsx" },
});

环境变量

这些环境变量是支持但可选的. 大多数也可以配置在 canva-app.config.ts (被推荐);有些仍只被封入.

变量说明需要时
CANVA_FRONTEND_PORTDev服务器端口(默认为8080). 覆盖 devServer.port。 。 。 .可选的 - 偏好 devServer.port
CANVA_BACKEND_PORT后端服务器端口(默认为3001). 覆盖 backend.port。 。 。 .可选的 - 偏好 backend.port
CANVA_BACKEND_HOST后端 URL 已构建的应用程序调用 。 覆盖 backend.host。 。 。 .可选的 - 偏好 backend.host
CANVA_HMR_ENABLED启用热模块替换( E)true编号 :false) (中文(简体) ).可选
CANVA_APP_ORIGINApp 源代码 URL.高频
CANVA_APP_IDCanva应用ID.运行后端时需要
NGROK_AUTHTOKEN(原始内容存档于2018-07-21). ngrok auuthtoken.使用时需要 --tunnel

配置优先

当一个选项可以设置在一个以上的地方时,最高优先级获胜: CLI 旗 > 环境变量 > canva-app.config.ts > 包默认值. 并不是每个频道都有每个选项; CLI 打印 a Warn: 当一个阴道var 阴影一个配置值.

设计哲学

公众 defineConfig() API故意最小化:

  • entry, (中文(简体) ), rootDir,以及 outputDir - 基本应用程序配置
  • bundler - 选择构建工具(默认创建,也支持网页包)
  • devServer - 开发服务器选项(端口、HTTPS)
  • backend - 在dev服务器旁运行后端
  • extractTranslations - i18n 提取选项
  • config - 脱逃舱口,供捆绑者定制

每个选项通过CLI旗帜和环境变量在运行时都是压倒性的,因此配置文件持有项目稳定的东西,而引用控制了其余部分.

CLI 命令

软件包提供了 canva-app-scripts CLI带有以下命令. "Canva CLI"的音乐剧 canva apps start 财务报告和审定财务报表 canva apps build 被推荐的运行方式; 使用 canva-app-scripts 如果你不想通过Canva CLI的话.

dev

启动开发服务器 。 服务应用程序从 src/index.tsx。 。 。 .

npx canva-app-scripts dev

如果配置了后端( 或 --backend-entry ,后端条目在 nodemon 下与 Dev 服务器一起运行,并有 SSL 证书路径传递到它的环境. 一个后端崩溃 撕裂整个dev服务器下来。 见 后端 用于配置选项.

npx canva-app-scripts dev --entry ./src/app.tsx
npx canva-app-scripts dev --backend-entry ./backend/server.ts

build

构建生产应用. 产出至 dist/ 默认.

npx canva-app-scripts build
npx canva-app-scripts build --entry ./src/app.tsx --output-dir ./build

extract-translations

从源文件提取 i18n 信件到 dist/messages_en.json。 。 。 .

npx canva-app-scripts extract-translations
npx canva-app-scripts extract-translations --output-dir ./i18n --pattern "src/**/*.{ts,tsx}"
npx canva-app-scripts extract-translations --output-file messages.json

全球CLI选项

  • --entry - 应用程序的条目文件(覆盖) entry 从配置; 上 dev 财务报告和审定财务报表 build(中文(简体) )
  • --tunnel -通过公共HTTPS隧道(别名: --ngrok(中文(简体) )
  • --use-https - 在HTTPS上启动本地开发服务器
  • --override-frontend-port - 覆盖前端端口
  • --backend-entry - 后端条目脚本路径(覆盖) backend.entry 从配置)

更改日志

见 CHANGELOG.md 文档.

捐款

我们正在积极开发这个一揽子计划,但目前不接受第三方的捐款. 如果您想要求修改或添加软件包,请通过 Canva 开发者社区。 。 。 .

许可证

见 LICENSE.md 文档.

版本与发布记录

@canva/app-scripts 共发布 10 个版本,首次发布于 2026/07/08;过去 12 个月发布了 10 个版本。

版本发布日期距今
1.2.0latest2026/11/09今天
1.1.22026/10/011 个月前
1.1.12026/09/012 个月前
1.1.02026/08/202 个月前
1.0.02026/08/122 个月前
0.0.0-beta.52026/08/112 个月前

关于 @canva/app-scripts 的常见问题

@canva/app-scripts 是什么?

为 Canva Apps 构建脚本和捆绑器配置

如何安装 @canva/app-scripts?

在项目目录运行 npm install @canva/app-scripts,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 canva-app-scripts,可以用 npx canva-app-scripts 直接运行。

@canva/app-scripts 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@canva/app-scripts 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@canva/app-scripts 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@canva/app-scripts 可以商用吗?

@canva/app-scripts 使用 SEE LICENSE IN LICENSE.md 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@canva/app-scripts 的下载量有多少?

根据 npm 官方下载统计,@canva/app-scripts 在 2026/10/09 – 2026/11/07 这 30 天内被下载 40,879 次,日均约 1,363 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canva/app-scripts 还在维护吗?

最新版本 1.2.0 发布于 2026/11/09(今天);至今共发布 10 个版本,其中过去 12 个月发布了 10 个;首次发布于 2026/07/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。