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

时间:2016-10-26 12:03:45

标签: javascript node.js azure

我正在使用本地git部署将节点应用程序部署到Azure。我让它在暂存环境中也没有问题(也在Azure上),我现在正在设置一个生产环境。

应用程序中涉及的每个文件都会抛出错误 - 但是只要我在FTP客户端中打开该文件并保存它而不进行更改,该特定文件的错误就会消失 - 并且下一个文件将被抛出错误。

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

运行部署,刷新浏览器。

获取Unexpected token ILLEGAL on server.js line 1

之类的错误

server.js保存在FTP客户端中,而不进行更改。

重启应用,刷新浏览器。

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

node_modules/express/index.js:11保存在FTP客户端中,而不进行更改。

重启应用,刷新浏览器。

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

上发出错误:node_modules/lib/express.js:16

我会停在那里,但在现实生活中我继续并且行为一直在持续 - 每个文件在它尝试要求的第一件事上都会出错,直到它被保存在FTP客户端中。< / p>

最重要的是,我将应用程序保持不变20分钟,然后回来了,我回到了开头 - 尽管我的代码没有任何变化,但仍然Unexpected token ILLEGAL on server.js line 1。我尝试保存每个文件,基本上只是重复上面的步骤,得到相同的结果。

我完全陷入困境,不知道接下来要做什么,而不是保存代码库中的每个文件。知道这里可能会发生什么,或者我如何通过调试问题前进?

2 个答案:

答案 0 :(得分:1)

您的文件开头很可能有Byte-Order-Mark

有一个简单的gist by 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; }
            });
        }
    });
});

答案 1 :(得分:0)

在与Azure支持人员联系之后,事实证明问题是由于WEBSITE_DYNAMIC_CACHE被设置为1而不是0.该功能在天蓝色门户网站中不可见,并且是&#34 ;在开发中,目前正在私下预览。&#34;我遇到的问题是WEBSITE_DYNAMIC_CACHE和节点应用程序的已知错误。

我们仍然不确定如何/为什么它首先被设置为1,但它已经修复,所以我们现在不在乎。

多么有趣的一天!