目标
要创建一个npm包,
- 导出单个常量
data
,它是JS对象的数组,例如
const export data = [{a:1, b:2}, {a:3, b:4}];
- 在浏览器和节点中工作(但如果只有一个可能,则首选浏览器)
- 是最小尺寸
我尝试了什么
我有一个可用的Node实现,它使用Parcel构建。它打包了一个数据文件(.csv)和一个index.js,后者在运行时读取(使用d3)并解析(使用fs)csv为常量变量data
。这在节点中运行良好。
问题
捆绑版本失败,因为依赖于仅作为Node的fs
。所以我想知道:
- 是否有适合
fs
的浏览器友好的替代方案(我不知道) - 是否有一种更好、肯定更直接的方式来打包这样的一致性数据。感觉就像我在重新发明许多轮子,带来不必要的痛苦
包裹或其他捆绑商对此完全是小题大做。你所需要的只是一个小脚本,它采取以下步骤:
- 使用一些CSV解析器将CSV读取到所需的结构中
- 使用以下方法在当前目录
index.js
中写入一个文件:
fs.writeFileSync('./index.js', `export const data = ${JSON.stringify(myData)};`):
然后,重要的部分是,在发布包之前,在构建时执行此操作。发布的包只需要生成的文件,而不需要csv或构建脚本或任何依赖项。
您可以从另一个JS文件导出字符串,而不是将CSV放在.csv
文件中,例如data.js
:
export default `[paste csv here]`
然后简单地导入并使用该文件:
import csv from "./data"
这很好,因为捆绑后CSV在同一个文件中,但不会打乱代码。
或者,我发现了一个npm包,它是一个包裹插件,可能会为你做这件事:https://www.npmjs.com/package/parcel-transformer-csv