我想使用 xlsx 模块来读取和写入 xlsx 文件,因此我通过运行
npm install xlsx
安装了 xlsx,并且我遵循了一个教程,其中提到了
// Requiring the module
const reader = require('xlsx')
// Reading our test file
const file = reader.readFile('./test.xlsx')
它工作正常,但我使用的是另一个不是 commonJS 模块的模块,所以我使用了
import reader from 'xlsx';
const file = reader.readFile('./test.xlsx');
它也可以工作,但我的问题是我可以使用任何东西代替阅读器,并且仍然能够访问 readFile 方法。例如,
import anyRandomWord from 'xlsx';
const file = anyRandomWord.readFile('./test.xlsx');
现在不起作用的案例
1)官方网站是这么说的
The module also ships with xlsx.mjs for use with import:
import * as XLSX from 'xlsx/xlsx.mjs';
当我使用时
import * as XLSX from 'xlsx/xlsx.mjs';
const file = XLSX.readFile('./test.xlsx');
我收到错误
Error: Cannot access file ./test.xlsx
at read_binary (file:///home/shivam/Others/Translate/node_modules/xlsx/xlsx.mjs:3234:8)
at readSync (file:///home/shivam/Others/Translate/node_modules/xlsx/xlsx.mjs:23811:69)
at Module.readFileSync (file:///home/shivam/Others/Translate/node_modules/xlsx/xlsx.mjs:23851:9)
at file:///home/shivam/Others/Translate/translate.js:4:19
at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:120:12)
当我使用时
import * as XLSX from 'xlsx';
const file = XLSX.readFile('./test.xlsx');
我收到错误
TypeError: XLSX.readFile is not a function
at file:///home/shivam/Others/Translate/translate.js:4:19
at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:120:12)
请告诉我为什么上述情况可以使用导入中的任何随机名称,而以下情况则不起作用。 我在 package.json 中添加了“type”:“module”
当我使用时
import * as XLSX from 'xlsx/xlsx.mjs'; const file = XLSX.readFile('./test.xlsx');
我收到错误
错误:无法访问文件./test.xlsx
如文档中所述,关于 xlsx/xlsx.mjs
模块版本的使用:
mjs
版本不会自动加载原生节点模块,因此必须手动添加:import * as XLSX from 'xlsx'; /* load 'fs' for readFile and writeFile support */ import * as fs from 'fs'; XLSX.set_fs(fs);
我可以使用任何东西代替阅读器,并且仍然能够访问 readFile 方法...并且:
当我使用时
import * as XLSX from 'xlsx'; const file = XLSX.readFile('./test.xlsx');
我收到错误
类型错误:XLSX.readFile 不是函数
xlsx
包有一个default导出,您可以使用任何您想要的名称导入它,正如您最初想到的那样(即
import anyRandomWord from 'xlsx'
)。但是当您导入全部(即
import * as XLSX
)时,默认导出现在是合成导入的成员,即您现在应该执行
XLSX.default.readFile()