每个JS文件都会抛出错误,直到它被打开并保存在Azure上

Every JS file throws error until it's opened and saved on Azure

本文关键字:保存 Azure 存在 文件 JS 错误 出错 每个      更新时间:2023-09-26

我正在部署一个节点应用到Azure,使用本地git部署。我让它在登台环境(也在Azure上)正常工作,现在我正在设置一个生产环境。

应用程序中涉及的每个文件都会抛出一个错误-但是一旦我在FTP客户端中打开该文件并保存它,不做任何更改,该特定文件的错误就会消失-并且下一个使用的文件会抛出一个错误。

所以我采取的步骤是这样的:

运行部署,刷新浏览器。

获取Unexpected token ILLEGAL on server.js line 1

错误

保存server.js到FTP客户端,不做任何修改。

重启app,刷新浏览器

server.js现在没有问题,但它需要的第一个文件,表达,在node_modules/express/index.js:11上给出错误cannot find module ./lib/express (./lib/express肯定存在)

在FTP客户端中保存node_modules/express/index.js:11,不做任何更改。

重启app,刷新浏览器

现在,node_modules/express/index.js没有问题,但是它需要的第一个文件,./lib/express会给出一个错误:cannot find module merge-descriptors on node_modules/lib/express.js:16

我会停在这里,但在现实生活中我继续,行为一直在进行-每个文件在它试图要求的第一件事上出错,直到它被保存在FTP客户端。

最重要的是,我让应用程序保持不变20分钟,回来后,我又回到了开始-尽管没有更改我的代码,但我还是使用Unexpected token ILLEGAL on server.js line 1。我试着保存每个文件,基本上只是重复上面的步骤,得到相同的结果。

我完全卡住了,不知道下一步该做什么,除非在代码库中保存每个文件。知道这里可能发生什么,或者我如何继续调试这个问题吗?

你很可能在你的文件开头有一个字节顺序标记。

Domenic Denicola给出了一个简单的要点,告诉你如何检测和删除当前目录下的所有文件:

var fs = require("fs");
var path = require("path");
var wrench = require("wrench");
var BOM_CHAR_CODE = 65279;
var BOM = String.fromCharCode(BOM_CHAR_CODE);
var fileNames = wrench.readdirSyncRecursive(process.cwd()).filter(function (fileName) {
    return path.extname(fileName) === ".js";
});
fileNames.forEach(function (fileName) {
    fs.readFile(fileName, "utf8", function (err, fileContents) {
        if (err) { throw err; }
        if (fileContents.charCodeAt(0) !== BOM_CHAR_CODE) {
            fs.writeFile(fileName, BOM + fileContents, "utf8", function (err) {
                if (err) { throw err; }
            });
        }
    });
});

在与Azure支持联系后,发现问题是由于WEBSITE_DYNAMIC_CACHE被设置为1,而不是0。该功能在azure门户中不可见,并且"正在开发中,目前处于私有预览阶段"。我遇到的问题是WEBSITE_DYNAMIC_CACHE和节点应用程序的一个已知错误。

我们仍然不确定它最初是如何/为什么被设置为1的,但它是固定的,所以我们现在不关心。

多么有趣的一天!