如何为PureScript项目生成多份独立JS输出文件?优先Spago方案
如何为PureScript项目生成多页面独立JavaScript文件
一、Spago原生方案(优先推荐)
Spago支持配置多个入口点,无需拆分项目结构,就能生成对应页面的独立JS文件:
- 创建页面入口模块
在项目src目录下,为每个页面单独创建入口模块,比如:
src/Page/Home.purs(对应生成home.js)src/Page/Questions.purs(对应生成questions.js)src/Page/Tags.purs(对应生成tags.js)
每个模块需要包含页面初始化的核心逻辑(比如导出main函数)。
- 配置Spago入口点
修改项目根目录的spago.yaml,添加entrypoints字段,列出所有页面入口模块的路径:
entrypoints: - Page.Home - Page.Questions - Page.Tags
- 编译生成文件
执行基础编译命令:
spago build
编译完成后,output目录下会为每个入口模块生成对应的JS文件。如果需要打包后的独立可执行文件,使用bundle-app命令指定入口和输出路径:
# 单个页面打包 spago bundle-app --main Page.Home --to dist/home.js
可以把批量打包命令放到package.json的scripts里,方便一键执行:
{ "scripts": { "build:pages": "spago bundle-app --main Page.Home --to dist/home.js && spago bundle-app --main Page.Questions --to dist/questions.js && spago bundle-app --main Page.Tags --to dist/tags.js" } }
二、配合打包工具(Rollup/Webpack)
如果需要更复杂的打包逻辑(比如代码分割、资源整合),可以先用Spago编译所有模块到output目录,再通过Rollup或Webpack配置多入口生成文件:
以Rollup为例,创建rollup.config.js:
import purs from 'rollup-plugin-purescript'; export default [ { input: 'output/Page/Home/index.js', output: { file: 'dist/home.js', format: 'iife' }, plugins: [purs({ spago: true })] }, { input: 'output/Page/Questions/index.js', output: { file: 'dist/questions.js', format: 'iife' }, plugins: [purs({ spago: true })] } ];
执行rollup -c即可生成多个独立的页面JS文件。
注意事项
- 多个页面的共享代码会被每个bundle重复包含,若要优化体积,可使用打包工具的代码分割功能提取公共模块。
- 每个入口模块需确保包含可执行的初始化逻辑,保证页面加载时能正常运行。
内容的提问来源于stack exchange,提问作者Hi-Angel
相关产品推荐
相关产品推荐

