前端构建构建工具开发工具【免费下载链接】farmExtremely fast Vite-compatible web build tool written in Rust项目地址https://gitcode.com/gh_mirrors/fa/farm点击查看免费下载本文基于 Farm 仓库的 CLI 文档 cli-api.md系统讲解farmfe/cli提供的五组命令farm dev/start、farm build、farm watch、farm preview、farm clean及全局选项的完整参数、默认值与使用场景并结合 packages/cli/src/index.ts 与 packages/core/src/index.ts 的源码实现说明每个命令行参数最终如何映射为FarmCliOptions并驱动核心编译流程。读完本文你可以掌握在开发、构建、产物预览与缓存清理各阶段正确组合 Farm CLI 参数的方式并理解参数背后的默认配置来源。安装与运行 farm 命令Farm CLI 以 npm 包farmfe/cli发布通过 bin 条目注册了全局可执行的farm命令入口为./bin/farm.mjs见 package.json。在任意已安装该包的项目中可以直接使用 npx 查看帮助npx farm --help按 README 的用法开发、构建、预览、清理四个常用入口分别为farm dev # 开发模式启动 dev server farm build # 生产模式构建 farm preview # 本地预览构建产物 farm clean # 清理 Farm 持久化缓存从源码结构看CLI 本身并不实现任何编译逻辑packages/cli/src/utils.ts 中的resolveCore()通过await import(farmfe/core)动态加载核心包再取出start、build、watch、preview、clean五个 API若farmfe/core未安装会以 Cannot find farmfe/core module 错误并退出。这正是文档强调请在已安装farmfe/cli的项目中运行的原因——farmfe/core是必需的运行依赖。命令总览cli-api.md 将 CLI 命令归纳如下命令作用farm [root]启动开发服务器。别名farm start、farm devfarm build [root]以生产模式编译项目farm watch [root]以开发模式编译并在文件变化时重新构建farm preview [root]本地预览已构建好的生产产物farm clean [path]删除 Farm 持久化缓存文件在 packages/cli/src/index.ts 中可以一一对应这五个命令的注册dev 命令使用cli.command([root], ...)并通过.alias(start).alias(dev)注册两个别名第 45~51 行其余四个命令分别以build [root]、watch [root]、preview [root]、clean [path]注册。所有命令的第一个位置参数root或path都可选缺省时即以当前目录为项目根。全局选项以下选项对全部命令生效除非命令自身帮助另有说明源码中统一注册在cac实例上index.ts 第 24~42 行选项说明-c, --config file指定配置文件。默认按farm.config.ts、farm.config.js、farm.config.cjs、farm.config.mjs、farm.config.cts、farm.config.mts的顺序查找-m, --mode mode设置配置/环境 modedevelopment、production 等--base path设置公开基础路径public base path-d, --debug [feat]输出调试日志可选指定功能域feature--clearScreen开启或关闭日志输出时清屏行为默认true-h, --help显示帮助-v, --version显示已安装的farmfe/cli与farmfe/core版本配置文件查找逻辑由 packages/core/src/config/load-config-file.ts 实现若显式传入configFile则以path.resolve(root, configFile)解析为绝对路径否则遍历 constants.ts 中定义的DEFAULT_CONFIG_NAMES数组顺序为farm.config.ts→farm.config.js→farm.config.cjs→farm.config.mjs→farm.config.cts→farm.config.mts取第一个真实存在的文件。因此当项目同时存在多个候选文件时.ts扩展名的配置文件优先级最高。关于-v, --versionCLI 通过cli.version(...)同时打印两个包的版本index.ts 第 255~257 行其中farmfe/cli版本来自 utils.ts 读取自身 package.json 的VERSIONfarmfe/core版本则直接引用 core 包导出的VERSION常量。排查问题时建议先用该命令确认两个包的版本是否匹配。farm [root]开发服务器farm dev / farm startfarm [root]即farm dev、farm start以开发模式编译项目并启动 Farm dev server。常用选项如下选项说明-l, --lazy启用懒编译lazy compilationCLI 帮助文本声明默认true--host host指定 host--port port指定端口--open服务器启动后打开浏览器--hmr启用热模块替换HMR--cors启用 CORS--strictPort指定端口被占用时直接退出报错CLI 帮助文本声明默认true--target target设置输出目标环境node、browser或library--format format设置输出格式esm或commonjs--sourcemap输出 sourcemap--treeShaking启用 tree shaking--minify启用代码压缩几个值得展开的细节默认端口core 包的DEFAULT_DEV_SERVER_OPTIONSconstants.ts 第 43~81 行将 dev server 默认端口设为9000可用环境变量FARM_DEFAULT_SERVER_PORT覆盖默认 host 为localhost。懒编译的默认值CLI 帮助文本标注-l, --lazy默认true而 core 侧默认编译配置中lazyCompilation初始为false见 resolve-config.ts 第 35~41 行的默认项。未显式传参时最终由 core 默认配置接管显式传参则以命令行值为准实际行为以当前安装版本的合并逻辑为准。--strictPortcore 默认服务器配置中strictPort初始为falseDEFAULT_DEV_SERVER_OPTIONS。如需在 CI 或多项目并行开发时确保端口独占建议显式传入--strictPort。--base的特殊映射dev 命令的 action 中若传入了全局--base会额外将compilation.output覆写为{ publicPath: options.base }index.ts 第 99~104 行即--base直接影响产物资源的publicPath而非仅仅拼接 URL 前缀。在 dev 命令的 action 中所有选项被组装为FarmCliOptionsroot、server、configFile、mode、compilation等字段随后调用 core 的start()。从 packages/core/src/index.ts 第 37~47 行可以看到start的实现Server.createServer(inlineConfig)→server.listen()→server.printUrls()失败时记录 Failed to start the server。CLI 侧则通过handleAsyncOperationErrors(..., Failed to start server)统一捕获并退出见 utils.ts 第 98~107 行。farm build [root]生产构建farm build [root]以生产模式编译项目常用选项选项说明-o, --outDir dir输出目录-i, --input file入口 HTML/输入文件--target target输出目标环境node、browser或library--format format输出格式esm或commonjs--sourcemap输出 sourcemap--treeShaking启用 tree shaking--minify启用代码压缩关于--target的取值范围CLI 类型定义 packages/cli/src/types.ts 第 38~48 行给出的完整联合类型比文档表格更宽除browser、node、library外还包括细粒度变体node16、node-legacy、node-next、browser-legacy、browser-es2015、browser-es2017、browser-esnext。做兼容旧浏览器的生产构建时可以借助这些取值。实现链路上build命令 action 将参数组装后调用 core 的build(inlineConfig)core 侧build函数index.ts 第 122~133 行首先以(build, production)调用resolveConfig完成配置解析mode 固定为 production再createCompiler并执行内部构建_internalBuild。注意输出目录若未指定默认编译配置DEFAULT_COMPILATION_OPTIONS中output.path为./distconstants.ts 第 83~104 行即farm build的默认产物目录就是dist。farm watch [root]开发模式下的监听重建farm watch [root]以开发模式编译并在文件变化时重新构建。该命令通常用于 Node/库类产物的持续构建而不是直接 serve 一个应用。选项选项说明-o, --outDir dir输出目录-i, --input file入口输入文件--target target输出目标环境node、browser或library--format format输出格式esm或commonjs--sourcemap输出 sourcemap相比buildwatch不提供--minify与--treeShaking选项——从 index.ts 第 155~189 行可以看到 watch 的 action 只将sourcemap传入compilation这符合开发模式产物的定位。core 侧watch函数packages/core/src/index.ts 第 135~152 行的执行顺序是先resolveConfig(inlineConfig, watch)然后createCompiler若解析后的配置启用了lazyCompilation会额外调用Server.createAndStartLazyCompilationServer启动懒编译服务器随后执行首次构建_internalBuild最后进入watchFileChangeAndRebuild定义于 packages/core/src/watcher/index.ts注册文件变更监听在add/变更事件上触发compiler.update实现增量重建。farm preview [root]预览生产产物farm preview [root]用于本地提供已构建好的生产产物需先运行farm build。选项选项说明--host [host]指定 host--port port指定端口--open预览服务启动后打开浏览器--outDir dir提供服务的目录默认dist--strictPort指定端口被占用时退出从 constants.ts 的DEFAULT_DEV_SERVER_OPTIONS.preview配置可知preview 服务的默认端口为1911独立于 dev server 的 9000同样可被FARM_DEFAULT_SERVER_PORT影响默认distDir为dist、默认 host 为localhost与文档中 Defaults todist 的说明一致。CLI 侧 preview 命令index.ts 第 191~235 行同时写了两处路径server.preview.distDir options.outDir供静态服务读取compilation.output.path options.outDir供编译输出对齐若传入--base同样覆写compilation.output.publicPath。core 的preview函数创建PreviewServer并调用createPreviewServer()与listen()packages/core/src/index.ts 第 49~62 行。farm clean [path]清理持久化缓存farm clean [path]删除 Farm 的持久化缓存文件默认清理当前项目解析出的缓存目录。选项选项说明--recursive递归查找node_modules目录并清理其下的 Farm 缓存位置core 侧clean(rootPath, recursive)的实现packages/core/src/index.ts 第 154~195 行可以确认其行为先解析一份默认配置从compilation.persistentCache.cacheDir取得缓存路径recursive为真时通过findNodeModulesRecursively(rootPath)收集所有node_modules下的缓存位置否则只处理解析出的cacheDir一个随后并发地fs.rm(cachePath, { recursive: true, force: true })删除目录不存在ENOENT时输出 No cached files found in ... 警告而不是报错。命令行参数如何流入核心配置理解 CLI 与 core 的衔接有助于排错。以 dev 命令为例参数流转如下参数归一化resolveCommandOptionsutils.ts 第 75~81 行先经filterDuplicateOptions去重同一选项重复传入时取最后一个再由cleanOptions剔除--、m、c、l、lazy、mode、base、config、clearScreen等全局键只留下服务器/构建相关的字段进入server配置。组装FarmCliOptionsdev 命令将剩余选项填入FarmCliOptionsroot、server、clearScreen、configFile、mode、compilation等类型定义见 packages/core/src/config/types.ts 第 419~428 行。与配置文件合并core 的resolveConfigpackages/core/src/config/index.ts 第 67~105 行先以inlineOptions.mode || defaultMode决定 mode调用loadConfigFile加载配置文件再通过mergeConfig将 CLI 内联配置与配置文件内容合并最终产出ResolvedUserConfig交给 Compiler。异常统一出口所有命令的异步操作都包在handleAsyncOperationErrors中失败时打印带错误信息的日志并以非零方式退出例如 dev 命令的 Failed to start server、build 的 error during build。此外配置文件的加载细节如配置加载失败时提示可设置FARM_CONFIG_FORMATcjs或FARM_CONFIG_FULL_BUNDLE1见 load-config-file.ts 第 100~117 行的错误分支可在配置文件解析异常时作为排查线索。小结Farm CLI 的命令集围绕开发、构建、监听、预览、清缓存五个高频场景组织farm dev默认端口 9000、可开懒编译与 HMR、farm buildproduction mode、默认输出dist、farm watch开发模式 文件监听重建面向 Node/库产物、farm preview默认端口 1911、默认服务dist目录与farm clean清理persistentCache缓存目录支持--recursive。所有命令共享-c/--config、-m/--mode、--base、-d/--debug、--clearScreen等全局选项参数最终经resolveCommandOptions归一化后封装为FarmCliOptions由farmfe/core的start/build/watch/preview/clean完成配置解析与编译。更多完整参数说明可查阅 website/docs/cli/cli-api.md命令注册与选项映射的源码见 packages/cli/src/index.ts。赞分享前端构建构建工具开发工具【免费下载链接】farmExtremely fast Vite-compatible web build tool written in Rust项目地址https://gitcode.com/gh_mirrors/fa/farm点击查看免费下载相关推荐VitePress CLI 命令行完全指南dev、build、preview 与 init 命令详解VitePress CLI 命令行完全指南dev、build、preview 与 init 命令详解 VitePress 是一套基于 Vite 与 Vue 的前端文档VitePress CLI 完全指南dev、build、preview 与 init 四大命令及全部选项详解VitePress CLI 完全指南dev、build、preview 与 init 四大命令及全部选项详解 本文围绕 VitePress 静态站点生成器的命AI 技能人工智能VitePress CLI 命令完全指南dev、build、preview、init 实战详解VitePress CLI 命令完全指南dev、build、preview、init 实战详解 VitePress 的命令行接口CLI是驱动开发、构建、预前端文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考