【问题标题】:why babel stores .babel.json in USERPROFILE path为什么 babel 将 .babel.json 存储在 USERPROFILE 路径中
【发布时间】:2015-09-24 08:59:33
【问题描述】:

我正在 azure web 应用程序上运行 nodejs 应用程序,我正在尝试在其中使用 npm 集成 babel。问题是 babel 正在尝试访问

处的文件

%USERPROFILE%

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

npm install -g babel

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

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

有没有办法让 babel 在 web 应用上工作?

更新

我确实省略了一些东西。当我尝试加载babel/register时出现错误。

require('babel/register')({
  optional: ["es7.asyncFunctions"]
});

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

应用程序抛出未捕获的异常并终止:错误: ENOENT,没有这样的文件或目录 'D:\local\UserProfile.babel.json' 在 Object.fs.openSync (fs.js:438:18) 在 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) 在 process._tickCallback (node.js:419:13) 在 Function.Module.runMain (module.js:499:11) 启动时 (node.js:119:16) 在 node.js:906:3

项目在Github

【问题讨论】:

  • 尝试运行命令npm install --save-dev babel-core。 npm 的选项-g 会将包安装到节点模块的全局路径中。在 Azure 中,路径受到保护。
  • @Badescu,由于这个问题很难在我的环境中重现,您能否利用github.com/projectkudu/kudu/wiki/… 指出的方法与我们分享您的网站信息?

标签: node.js azure babeljs kudu


【解决方案1】:

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

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

【讨论】:

  • 在需要 babel-polyfill 之前或之后设置是否重要?
  • 我是新手...我在哪里可以找到应用程序设置?
【解决方案2】:

您通过 BABEL_CACHE_PATH 更改 .babel.json 的存储位置

我认为它比禁用缓存更好

BABEL_CACHE_PATH=any_writable_and_exist_dir/babel.cache.json

【讨论】:

    【解决方案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

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

    【讨论】:

      【解决方案4】:

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

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

      如果您必须使用节点全局模块,您可以为节点 Web 角色配置启动任务,以便在云服务中启动 Web 角色时安装节点模块。请参考https://azure.microsoft.com/en-us/documentation/articles/cloud-services-startup-tasks/

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

      我尝试将 babel 模块安装在路径“wwwroot”并运行命令node_module\.bin\babel,并编写一个包含代码require('babel') 的文件以成功运行它。它工作正常。

      最好的问候。

      【讨论】:

      • 感谢彼得的回复。我确实省略了一些东西。我已经 UPDATE-ed 我的问题。这个问题很可能不是来自全局模块,这是我做出的假设。我创建了一个测试项目,并使用 Git deploy 再次重现了它。我已经上传到github.com/badescuga/testbabelrequire
      • @BadescuAlexandru 我在 Kudu 的路径 wwwroot 中使用命令 npm install babel(不是 babel-core)安装了 babel 模块。当节点运行 js 脚本文件并在同一路径 babel/register 加载 wwwroot 时,我尝试重现您的问题,但没有发生任何预期。您的问题可能是由您安装的模块引起的babel-core。你能检查一下 node_modules 目录吗?
      • 我已经检查过了,我得到了babel。奇怪的是你没有遇到任何问题。你确定你正在执行 server.js 吗?你在 D:\local\UserProfile 中看到任何 .babel.json 吗?请注意,对于部署,我使用了 git(所以 kudu 为我进行了编译)
      猜你喜欢
      • 2013-11-18
      • 2021-07-22
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多