我在天蓝网络应用上运行了一个nodejs应用,我试图在其中使用npm集成babel。问题是babel试图在
处理文件%USERPROFILE%
命名为.babel.json,这是一个不存在的文件。这很可能是通过以下方式安装的:
npm install -g babel
在天蓝色网页应用中,我似乎根本无法找到它(即使在kudu中为网站运行npm install -g babel
之后)。
我使用kudu将%USERPROFILE%
自己的文件复制到%USERPROFILE%
,但在网络应用重新启动时文件消失了。
有没有办法让babel在网络应用上工作?
更新
我确实省略了一些东西。我尝试加载babel/register
时出现错误。
require('babel/register')({
optional: ["es7.asyncFunctions"]
});
我在流日志中看到的实际错误是
应用程序抛出未捕获的异常并终止:错误: ENOENT,没有这样的文件或目录' D:\ local \ UserProfile.babel.json' 在Object.fs.openSync(fs.js:438:18) at Object.fs.writeFileSync(fs.js:977:15) 在保存(D:\ home \ site \ wwwroot \ node_modules \ babel \ node_modules \ babel-core \ lib \ api \ register \ cache.js:35:19) at process._tickCallback(node.js:419:13) 在Function.Module.runMain(module.js:499:11) 在启动时(node.js:119:16) 在node.js:906:3
项目在Github
答案 0 :(得分:17)
我遇到了同样的问题,通过在我的应用程序设置中设置环境变量BABEL_DISABLE_CACHE=1
来禁用babel缓存来解决它。
您可以在此处详细了解babel缓存: https://babeljs.io/docs/usage/require/#environment-variables
答案 1 :(得分:3)
当我尝试加载babel / register时出现错误。
请检查(.. \ node_modules \ babel \ node_modules \ babel-core \ lib \ api \ register \ Cache.js)中的Cache.js,看看是否有任何babel缓存路径定义,例如:
process.env.BABEL_CACHE_PATH || _path2["default"].join(_homeOrTmp2["default"], ".babel.json");
如果你利用这种变量,需要有BABEL_CACHE_PATH应用程序设置键和./cache的值,否则任何带有babel的东西都不能用于azure。如果您想知道使用node.js访问Azure网站中的应用程序设置的详细信息,请参阅http://blog.syntaxc4.net/post/2012/07/26/accessing-app-settings-configured-in-microsoft-azure-web-sites-using-php-and-node-js.aspx。
如果您有任何进一步的顾虑,请随时告诉我们。
答案 2 :(得分:3)
您可以通过BABEL_CACHE_PATH
更改.babel.json
的商店位置
我认为它比禁用缓存更好
BABEL_CACHE_PATH = any_writable_and_exist_dir / babel.cache.json
答案 3 :(得分:0)
我从Azure Gallery“Node JS Empty Web app”创建了一个nodejs应用程序,并在Kudu中运行命令npm install -g babel
。我试图重现你的问题,但没想到babel没有尝试访问%USERPROFILE%的.babel.json文件。
在Azure上,npm全局模块将安装到路径“D:\ local \ AppData”中。重新启动WebApp时,将删除节点全局模块。
如果必须使用节点全局模块,则可以为节点Web角色配置启动任务,以便在Cloud Service中启动Web角色时安装节点模块。请参阅https://azure.microsoft.com/en-us/documentation/articles/cloud-services-startup-tasks/。
通常,在Azure Web Apps上的Kudu调试控制台的路径“wwwroot”上使用npm install <module-name>
安装节点模块。
我尝试在路径“wwwroot”上安装babel模块并运行命令node_module\.bin\babel
,并编写包含代码require('babel')
的文件以成功运行它。它工作正常。
最诚挚的问候。