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

why babel stores .babel.json in USERPROFILE path

我是 运行 Azure 网络应用程序上的 nodejs 应用程序,我正在尝试使用 npm 在其中集成 babel。问题是 babel 试图访问位于

的文件

%USERPROFILE%

名为 .babel.json,一个不存在的文件。这很可能是由以下人员安装的:

npm install -g babel

在 azure web 应用程序上,我似乎根本找不到它(即使在站点的 kudu 中 运行 npm install -g babel 之后)。

我使用 kudu 自己将 %USERPROFILE% 中的文件复制到 %USERPROFILE%,但在网络应用程序重新启动时文件消失了。

有没有办法让 babel 在网络应用程序上运行?

更新

我确实遗漏了一些东西。当我尝试加载 babel/register.

时出现错误
require('babel/register')({
  optional: ["es7.asyncFunctions"]
});

我在流式日志中看到的实际错误是

Application has thrown an uncaught exception and is terminated: Error: ENOENT, no such file or directory 'D:\local\UserProfile.babel.json' at Object.fs.openSync (fs.js:438:18) at Object.fs.writeFileSync (fs.js:977:15) at save (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) at Function.Module.runMain (module.js:499:11) at startup (node.js:119:16) at node.js:906:3

项目在Github

我从 Azure Gallery "Node JS Empty Web app" 和 运行 在 Kudu 中的命令 npm install -g babel 创建了一个 nodejs 应用程序。我试图重现您的问题,但失败了,因为 babel 没有尝试访问文件 .babel.json at %USERPROFILE%.

在 Azure 上,npm 全局模块将安装到路径 "D:\local\AppData" 中。当您重新启动 WebApp 时,节点全局模块将被删除。

如果必须使用node全局模块,可以为node web role配置启动任务,在云服务web role启动时安装node modules。请参考https://azure.microsoft.com/en-us/documentation/articles/cloud-services-startup-tasks/.

通常,在 Azure Web Apps 上的 Kudu 调试控制台 "wwwroot" 路径下使用 npm install <module-name> 安装节点模块。

我尝试在路径 "wwwroot" 和 运行 命令 node_module\.bin\babel 安装 babel 模块,并写入一个包含代码 require('babel') 到 [=32] 的文件=] 它成功了。效果很好。

此致。

The error appeared when i tried load 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

如果您还有任何疑问,请随时告诉我们。

我有同样的问题,通过在我的应用程序设置中设置环境变量 BABEL_DISABLE_CACHE=1 来禁用 babel 缓存来解决它。

您可以在此处阅读有关 babel 缓存的更多信息: https://babeljs.io/docs/usage/require/#environment-variables

您将 .babel.json 的商店位置更改为 BABEL_CACHE_PATH

我认为它比禁用缓存更好

BABEL_CACHE_PATH=any_writable_and_exist_dir/babel.cache.json