我正在使用本地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
。我尝试保存每个文件,基本上只是重复上面的步骤,得到相同的结果。
我完全陷入困境,不知道接下来要做什么,而不是保存代码库中的每个文件。知道这里可能会发生什么,或者我如何通过调试问题前进?
答案 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,但它已经修复,所以我们现在不在乎。
多么有趣的一天!