前端构建构建工具开发工具【免费下载链接】farmExtremely fast Vite-compatible web build tool written in Rust项目地址https://gitcode.com/gh_mirrors/fa/farm点击查看免费下载Farm 是一个使用 Rust 编写的高性能 Vite 兼容 Web 构建工具其官方 CLI对应本仓库中的farmfe/cli包将编译能力封装为一组简洁的命令覆盖开发、生产构建、监听重建、本地预览与缓存清理的完整工作流。本文以 Farm 1.x 版本的 CLI 文档 cli-api.md 为骨架结合 packages/cli/src/index.ts 与 packages/core/src/index.ts 等源码实现逐一讲解每条命令的用法、全部参数含义、参数与配置文件的映射关系以及背后的执行原理帮助你像熟悉 Vite CLI 一样熟练驾驭 Farm CLI。一、CLI 概览一条命令启动整个构建流程Farm CLI 允许你在终端中直接完成应用的启动、构建、预览与监听四类核心操作。在项目目录下执行npx farm -h即可看到完整的帮助信息不同版本的输出略有差异下文以 Farm 1.x 文档展示的farm/0.5.11输出为准farm/0.5.11 Usage: $ farm [root] Commands: [root] Compile the project in dev mode and serve it with farm dev server build compile the project in production mode watch watch file change preview compile the project in watch mode clean [path] Clean up the cache built incrementally plugin [command] Commands for manage plugins For more info, run any command with the --help flag: $ farm --help $ farm build --help $ farm watch --help $ farm preview --help $ farm clean --help $ farm plugin --help Options: -l, --lazy lazyCompilation --host host specify host --port port specify port --open open browser on server start --hmr enable hot module replacement --cors enable cors --strictPort specified port is already in use, exit with error -c, --config file use specified config file -m, --mode mode set env mode --base path public base path --clearScreen allow/disable clear screen when logging -h, --help Display this message -v, --version Display version number从源码实现看CLI 使用cac命令解析库构建见 packages/cli/src/index.ts版本号由farmfe/cli与farmfe/core两部分拼接而成见 packages/cli/src/index.ts。每个命令都可通过--help查看自身专属参数命令执行后由 packages/cli/src/utils.ts 中的resolveCore()动态加载farmfe/core核心模块再调用其导出的start、build、watch、preview、clean函数见 packages/core/src/index.ts。这种CLI 负责解析参数、Core 负责实际编译的分层设计保证了 CLI 极轻量仅依赖cac见 packages/cli/package.json。二、全局选项所有命令共享的参数基础下列选项在所有命令中通用由 CLI 在注册各命令前统一声明见 packages/cli/src/index.ts选项类型说明源码默认值/备注-c, --config filestring指定配置文件路径默认依次查找farm.config.js / farm.config.ts / farm.config.mjs / farm.config.cjs / farm.config.mts / farm.config.cts-m, --mode modestring设置环境模式env mode开发模式默认/最终写入compilation.mode并同步到process.env--base pathstring公共基础路径public base path映射为compilation.output.publicPath--clearScreenboolean允许/禁止日志输出时清屏默认true-h, --help-显示帮助信息--v, --version-显示版本号-需要特别说明的是--config在 packages/cli/src/utils.ts 中getConfigPath()会将相对路径基于项目根目录解析为绝对路径。若你不指定配置文件Farm 会按上文列出的默认文件名顺序自动探测。三、start / dev启动开发服务器farm start即无子命令直接运行farm [root]源码中同时注册了dev别名见 packages/cli/src/index.ts用于在开发环境下编译代码并启动 Farm 开发服务器。完整参数如下Usage: $ farm [root] Options: -l, --lazy lazyCompilation --host host specify host --port port specify port --open open browser on server start --hmr enable hot module replacement --cors enable cors --strictPort specified port is already in use, exit with error -c, --config file use specified config file -m, --mode mode set env mode --base path public base path --clearScreen allow/disable clear screen when logging参数逐个说明如下-l, --lazy开启lazy compilation懒编译默认true。开启后仅当模块被实际请求时才编译该模块及其依赖极大加快大型项目的冷启动速度。它的实现位于 packages/core/src/server/middlewares/lazyCompilation.ts浏览器请求以__lazy_compile为前缀的路径时中间件解析paths参数并调用compiler.update()增量编译指定模块然后以 JSONNode 环境或 ES 模块浏览器环境的形式返回动态资源映射。注意lazyCompilation 仅在开发模式下生效且与treeShaking互斥——若同时开启两者源码会输出警告并将懒编译强制关闭见 packages/core/src/config/normalize-config/index.ts。--host host指定服务器监听的主机名例如--host 0.0.0.0允许局域网访问。--port port指定端口号。--open服务器启动后自动在浏览器中打开页面。--hmr开启热模块替换Hot Module Replacement开发体验的核心功能。--cors开启跨域资源共享CORS头。--strictPort当指定端口已被占用时直接报错退出而不是自动切换到下一个可用端口默认true。从源码调用链看该命令最终构造FarmCliOptions并调用start()见 packages/cli/src/index.ts而 packages/core/src/index.ts 中的start()会执行Server.createServer(inlineConfig)创建服务器、server.listen()启动监听最后server.printUrls()打印访问地址。开发服务器的完整装配HTTPS 配置、public 文件处理、中间件栈、HMR 引擎、WebSocket 服务器等可参考 packages/core/src/server/index.ts。实际使用示例# 以当前目录为根启动开发服务器等价于 farm dev farm # 指定端口与主机并自动打开浏览器 farm start --port 3000 --host 0.0.0.0 --open # 关闭懒编译、开启 CORS farm dev --lazyfalse --cors四、build生产构建farm build将项目编译为可直接部署到生产环境的产物默认输出到dist目录Usage: $ farm build Options: -o, --outDir dir output directory -i, --input file input file path -w, --watch watch file change --targetEnv target transpile targetEnv node, browser --format format transpile format esm, commonjs --sourcemap output source maps for build --treeShaking Eliminate useless code without side effects --minify code compression at build time -c, --config file use specified config file -m, --mode mode set env mode --base path public base path --clearScreen allow/disable clear screen when logging -h, --help Display this message参数含义与约束如下-o, --outDir dir指定输出目录映射为compilation.output.path。-i, --input file指定入口文件路径映射为compilation.input.index。-w, --watch构建完成后进入监听模式。--targetEnv target指定转译目标运行环境。根据 packages/cli/src/types.ts可选值包括browser、node、node16、node-legacy、node-next、browser-legacy、browser-es2015、browser-es2017、browser-esnext、library。若不指定Farm 会自动判断当所有入口都是脚本文件.js/.ts/.jsx/.tsx时默认为library否则默认为browser见 packages/core/src/config/normalize-config/normalize-output.ts。--format format指定转译模块格式可选esm或commonjs即cjs。--sourcemap为构建产物生成 source map。--treeShaking开启 Tree Shaking剔除无副作用的无用代码。--minify构建时压缩代码。从调用链看build命令组装compilation配置后调用 Core 的build()见 packages/cli/src/index.ts。build()内部先以build模式解析配置再创建Compiler并进入_internalBuild()见 packages/core/src/index.ts该函数会按顺序执行 JS 插件的configureCompiler钩子、编译整个模块图、输出Build completed in ...耗时日志最后writeResourcesToDisk()将产物写入磁盘。生产模式下产物文件名默认会带上内容哈希[resourceName].[contentHash].[ext]见 packages/core/src/config/normalize-config/normalize-output.ts有利于长缓存策略。# 默认生产构建到 dist farm build # 指定输出目录、入口开启 sourcemap 与压缩 farm build -o dist-prod -i src/main.ts --sourcemap --minify # 面向 Node 环境、输出 CommonJS 格式 farm build --targetEnv node --format commonjs五、preview本地预览生产产物farm preview用于在本地预览生产构建产物。必须先执行farm build生成产物再运行该命令Usage: $ farm preview Options: --open [url] Whether to open the page in the browser at startup --port port Set the port number for Server snooping --host host Specify the host to listen to when Server starts -c --config config Specify the profile path -h, --help Show command help参数说明--open [url]启动时是否在浏览器打开页面可选填具体 URL。--port port设置预览服务器监听端口。--host host指定预览服务器监听的主机。-c --config config指定配置文件路径CLI 源码中还额外支持--outDir指定产物目录默认dist见 packages/cli/src/index.ts。预览服务器在 Core 中由PreviewServer实现见 packages/core/src/server/preview.ts它以preview模式解析配置组装中间件栈——包括基于sirv的静态文件服务、polka/compression压缩、CORS、代理等最后监听端口并注册 SIGTERM 退出处理。也就是说preview 与 dev 服务器共享了大量基础设施HTTP 服务器、代理、CORS 等区别在于前者只负责伺服已构建的静态产物不再进行任何编译。# 先构建再预览 farm build farm preview --port 8080 --open六、watch监听文件变化并持续重建farm watch一般用于node环境下的开发监听文件变化发生变化时自动重新构建Usage: $ farm watch Options: --format format transpile format esm, commonjs -o, --outDir dir output directory -i, --input file input file path -c, --config file use specified config file -m, --mode mode set env mode --base path public base path --clearScreen allow/disable clear screen when logging -h, --help Display this message其工作流程见 packages/core/src/index.ts为以watch模式解析配置并创建Compiler若配置开启了lazyCompilation则额外启动一个懒编译服务器Server.createAndStartLazyCompilationServer监听模块按需编译请求执行一次完整构建调用watchFileChangeAndRebuild()挂起监听文件变动时递归调用自身触发重建。底层文件监听基于chokidar实现见 packages/core/src/watcher/index.ts并通过Watcher事件总线对外暴露add、change、unlink等事件。适合 Electron 主进程、Node 服务端代码等编译输出即可运行的场景。# 监听当前项目并持续输出到 dist farm watch -o dist -i src/index.ts --format commonjs七、clean清理增量构建缓存farm clean用于清理 Farm 增量构建产生的本地缓存文件。由于 Farm 默认启用持久化缓存persistent cache当出现不可预测的编译错误或升级依赖后行为异常时清缓存是最常见的排障手段Usage: $ farm clean [path] Options: --recursive Recursively search for node_modules directories and clean them -c, --config file use specified config file -m, --mode mode set env mode --base path public base path --clearScreen allow/disable clear screen when logging -h, --help Display this message关键细节缓存位置默认缓存目录为node_modules/.farm/cache见 packages/core/src/config/normalize-config/normalize-persistent-cache.ts可通过配置项compilation.persistentCache.cacheDir自定义clean命令正是读取该配置拿到实际缓存路径。--recursive递归查找node_modules目录并逐个清理其中的 Farm 缓存适合 monorepo 场景。清理行为clean()会先统计目录若目录存在则递归删除并打印✨ ✨ Cache cleaned at ...若目录不存在则提示No cached files found in ...见 packages/core/src/index.ts。# 清理当前项目的 Farm 缓存 farm clean # 递归清理所有 node_modules 下的缓存monorepo / 多包仓库 farm clean --recursive八、源码视角CLI 参数是如何映射到编译配置的理解参数映射能让你在命令行参数与farm.config.ts 配置之间自由切换。以 packages/cli/src/index.ts 的实现为例各命令的映射关系如下CLI 参数映射到的配置字段说明root位置参数root项目根目录-c, --configconfigFile配置文件路径-m, --modemode→compilation.mode环境模式--basecompilation.output.publicPath公共路径--lazycompilation.lazyCompilation懒编译开关--host/--port/--open/--cors/--strictPort/--hmrserver.*服务器相关配置-o, --outDircompilation.output.path输出目录-i, --inputcompilation.input.index入口文件--targetEnvcompilation.output.targetEnv目标运行环境--formatcompilation.output.format输出模块格式--sourcemapcompilation.sourcemap是否生成 source map--treeShakingcompilation.treeShaking摇树优化--minifycompilation.minify代码压缩其中dev命令在组装选项时还会调用resolveCommandOptions()做两项预处理见 packages/cli/src/utils.tsfilterDuplicateOptions()在重复传参时取最后一个值cleanOptions()剔除config、mode、base等全局选项避免它们被误传给服务器配置。这解释了为什么全局选项与命令专属选项可以混用而不会互相干扰。九、实战提示与常见问题排查1. 端口被占用怎么办farm start默认strictPort为true端口被占用会直接报错退出若希望自动寻找空闲端口可在配置文件中设置server.strictPort: false。preview命令同样支持--strictPort见 packages/cli/src/index.ts。2. 遇到不可预测的编译错误优先执行farm clean清理node_modules/.farm/cache后重新构建——持久化缓存中的损坏项通常是此类问题的元凶。若项目在 CI 或 monorepo 中构建可配合--recursive一次性清理所有子包的缓存。3. 构建体积没有降下来确认--treeShaking与--minify均已开启并注意 lazyCompilation 模式不支持 treeShaking二者同时启用时懒编译会被自动关闭并输出警告见 packages/core/src/config/normalize-config/index.ts。4. 需要监听 Node 端代码使用farm watch --targetEnv node --format commonjsFarm 会按需编译并在文件变化后重建若同时开启懒编译还会启动一个懒编译服务器以加速 Node 侧动态 import 场景参考 packages/core/src/server/middlewares/lazyCompilation.ts。5. 快速确认可用命令随时执行farm --help、farm build --help查看各命令当前版本的完整参数列表版本号可通过farm -v查看输出包含 CLI 与 Core 两部分版本便于排查升级问题。总结Farm CLI 用五个命令覆盖了开发到部署的完整链路farm或farm dev驱动开发服务器并内置懒编译与 HMRfarm build产出带内容哈希的生产产物farm preview伺服构建结果farm watch面向 Node 环境的持续重建farm clean兜底处理增量缓存问题。其参数与farm.config.ts的配置字段一一对应本文给出的映射表可作为你切换命令行与配置文件两种配置方式的速查手册。更多配置项细节可参考仓库中的 CLI 实现packages/cli/src/index.ts与配置解析源码packages/core/src/config。赞分享前端构建构建工具开发工具【免费下载链接】farmExtremely fast Vite-compatible web build tool written in Rust项目地址https://gitcode.com/gh_mirrors/fa/farm点击查看免费下载相关推荐Farm 命令行完整指南farm CLI 的 start / build / watch / preview / clean 命令解析与底层实现流程Farm 命令行完整指南farm CLI 的 start / build / watch / preview / clean 命令解析与底层实现流程 Farm前端构建构建工具开发工具Farm CLI 命令详解farm create、start、build、watch、preview 全流程实战指南Farm CLI 命令详解farm create、start、build、watch、preview 全流程实战指南 Farm一个用 Rust 编写的、兼容前端构建构建工具开发工具Farm CLI 完全指南dev / build / watch / preview / clean 六大命令与全局参数详解Farm CLI 完全指南dev / build / watch / preview / clean 六大命令与全局参数详解 Farm 是一个基于 Rust前端构建构建工具开发工具上一篇终极指南如何用Dear ImGui在5分钟内为C项目添加专业GUI界面下一篇终极指南如何快速掌握Altair GraphQL客户端的10个强大功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考