框架和捆绑包
每个独立的发布包都可以在 https://cdn.sheetjs.com/ 下载。NodeJS 包被设计用于框架和捆绑包。这是一个适当的 ECMAScript 模块版本,可以用开发工具进行优化。
Https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz 是版本0.20.0的网址
安装
可以使用包管理器直接安装 Tarball:
npm 安装
npm i --save https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz
pnpm 安装
pnpm install https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz
Yarn 安装
yarn add https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz
安装完成后,可以用 xlsx 名称导入库:
import { read, writeFileXLSX } from "xlsx";
“Bundlers” 演示包括特定工具的示例。
SNYK BUG Snyk 安全工具可能会报告涉及“原型污染”的错误:
原型污染〔中度污染〕〔 https://security.snyk.io/vuln/snyk-js-xlsx-5457926〕
正如 Snyk 报告中指出的:
这个问题在0.19.3版本中得到了解决
Snyk 错误地报告了漏洞,这是 Snyk 工具中的一个 bug。
在 Snyk 修复这些错误之前,官方建议禁止发出警告。
遗留终端
从技术上讲,公共 npm 仓库中的旧版本可以使用 xlsx,但是仓库已经过时了。该仓库的最新版本是0.18.5
这是一个已知的注册表错误
SheetJS CDN https://CDN.SheetJS.com/是 SheetJS 模块的权威来源。
对于现有的项目,最简单的方法是卸载和重新安装:
yarn
yarn remove xlsx
yarn add https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz
pnpm
pnpm rm xlsx
pnpm install https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz
npm
npm rm --save xlsx
npm i --save https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz
当 xlsx 库是依赖项的依赖项时,package.json 中的覆盖字段可以控制模块解析:
package.json
{
"overrides": {
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz"
}
}
第三方包
对于一般的稳定性,“vendor” 模块是推荐的方法:
1)下载所需版本的 tarball (xlsx-0.20.0. tgz) ,当前版本可在 https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz 下载
2)在项目的根目录下创建一个供应商子文件夹,并将 tarball 移动到该文件夹。将其添加到项目存储库中。
3)使用包管理器安装 tarball:
npm
npm i --save file:vendor/xlsx-0.20.0.tgz
pnpm
pnpm install file:vendor/xlsx-0.20.0.tgz
Yarn
yarn add file:vendor/xlsx-0.20.0.tgz
这个包将安装为 xlsx 并可以直接使用。
使用
对于大多数框架和捆绑包工具,建议使用命名导入:
import { read, utils } from 'xlsx';
一些遗留的捆绑包需要 glob 导入:
import * as XLSX from 'xlsx';
const { read, utils } = XLSX;
对于支持 CommonJS 的遗留捆绑包,将需要:
var XLSX = require("xlsx");
var read = XLSX.read, utils = XLSX.utils;
“Bundlers” 演示包括特定工具的示例。
动态 import
带 import() 的动态导入只在需要时下载脚本。
动态导入将始终下载导入脚本的完整内容! 这是 ECMAScript 模块的一个设计缺陷
强烈建议使用包装器脚本来导入和重新导出 SheetJS 库中用于特定函数或页面的部分:
SheetJSWriteWrapper.js (wrapper script)
/* This wrapper pulls `writeFileXLSX` and `utils` from the SheetJS library */
import { utils, writeFileXLSX } from "xlsx";
export { utils, writeFileXLSX };
包装器脚本的动态导入只会加载请求的特性:
async function export_data() {
/* dynamically import the SheetJS Wrapper */
const XLSX = await import ("./SheetJSWriteWrapper");
const wb = XLSX.utils.book_new();
const ws = XLSX.utils.aoa_to_sheet([["a","b","c"],[1,2,3]]);
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
XLSX.writeFileXLSX(wb, "SheetJSDynamicWrapperTest.xlsx");
}
编码支持
如果需要编码支持,则必须手动导入 cpexcel.full.mjs:
/* load the codepage support library for extended support with older formats */
import { set_cptable } from "xlsx";
import * as cptable from 'xlsx/dist/cpexcel.full.mjs';
set_cptable(cptable);