SyntaxError: Unexpected identifier '目':文本被贴进 JS 文件

看到这个报错,几乎不用想:

题    目   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"