看到这个报错,几乎不用想:
题 目 AI辅助的全方位科研管理与创作平台
^
SyntaxError: Unexpected identifier '目'
at wrapSafe (node:internal/modules/cjs/loader:1637:18)
Node 把这一行当代码解析了,而中文字符不是合法 JS 标识符,直接崩。
真正原因
八成是你想读的文件内容被复制粘贴到 JS 源码里了。你的 .js 文件现在长这样:
const fs = require('fs')
rd = fs.readFileSync("1.txt")
console.log(rd.length)
题 目 AI辅助的全方位科研管理与创作平台 // ← 这一行是裸文本
裸文本既不是字符串(没引号)也不是注释(没 // 或 /* */),Node 只能当代码解析,然后崩在第一个中文字符上。
正确姿势
JS 文件里只留代码,文本内容留在 1.txt 里:
// index.js
const fs = require("fs");
const text = fs.readFileSync("1.txt", "utf8");
console.log(text.length);
# 1.txt
题 目 AI辅助的全方位科研管理与创作平台
顺手补:readFileSync 不传 encoding 的坑
fs.readFileSync("1.txt") 返回的是 Buffer,不是字符串:
const rd = fs.readFileSync("1.txt");
console.log(rd.length); // 字节数,中文会算错
想拿字符长度就要传编码:
const text = fs.readFileSync("1.txt", "utf8");
console.log(text.length); // 字符数
console.log(Buffer.byteLength(text, "utf8"));// 字节数
一个中文字符在 UTF-8 里是 3 字节,字符长度和字节长度会差好几倍——涉及”长度”就要先想清楚要哪种。
触类旁通:类似的 SyntaxError
同样是”文件混了不该混的东西”,报错方向不同:
| 报错 | 通常原因 |
|---|---|
Unexpected identifier '目' | 中文文本被贴进 .js |
Unexpected token '<' | HTML 页面被当 JS 加载(一般是路径错) |
Unexpected token 'export' | ESM 语法进了 CJS 文件(改 .mjs 或加 "type": "module") |
Unexpected token '?' / ?? / &&= | 老 Node 不认新语法,升级 Node |
Invalid or unexpected token 指向 | 文件带了 UTF-8 BOM,重存为无 BOM |
一句话总结
看到 Unexpected identifier '中文'——先打开源码文件,把混进去的文本挪出去。readFileSync 记得传 "utf8"。
