为什么babel在USERPROFILE路径中存储.babel.json

时间:2015-09-24 08:59:33

标签: node.js azure babeljs kudu

我在天蓝网络应用上运行了一个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

4 个答案:

答案 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')的文件以成功运行它。它工作正常。

最诚挚的问候。