如何在具有 canvas-data-cli 命令的 azure-scm-console 中执行 NodeJs 脚本

How to execute a NodeJs script in azure-scm-console, having canvas-data-cli command

我正在使用 node 执行代码文件形式的 azure scm 控制台。它给出错误:“'canvasDataCli' 未被识别为内部或外部命令、可运行程序或批处理文件。”

我可以 运行 直接从控制台成功执行 canvasDataCli 同步命令:

canvasDataCli sync -c ./config.js

这里是代码文件,test.js

   var Promise = require('promise');

   require('canvas-data-cli');

   var s='./config.js';
   var command=`canvasDataCli sync -c  ${s}`;

   function exec_command_promise(cmd) {
   return new Promise(function (resolve, reject) {

    var exec = require('child_process').exec;
    var child_process = exec(cmd);

    // event : stdout
    child_process.stdout.on('data', data => {
        console.log(data);
    });

    // event : stderr
    child_process.stderr.on('data', data => {
        console.log(data);
        reject(data);
    });

    // event : close
    child_process.on('close', data => {
        console.log(data);
        resolve(data);
    });

   }); 
   };

我尝试将 canvasDataCli 安装到我的 KUDU 站点,如果只是 运行 canvasDataCli 它会像你的那样显示 not recognized,这是因为 PATH 没有' t 包含变量。

所以如果你想使用 canvasDataCli 你需要设置 PATH ,你可以使用 set PATH=D:\local\AppData\npm;%PATH%,然后检查变量是否设置为 which canvasDataCli。如果成功,会显示/d/local/AppData/npm/canvasDataCli.

不过这是一个临时变量,您也可以通过applicationHost.xdt文件将其设置为永久变量。你需要把它放在 d:\home\site\.

这里是applicationHost.xdt内容。

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
 <system.webServer> 
  <runtime xdt:Transform="InsertIfMissing">
   <environmentVariables xdt:Transform="InsertIfMissing">
    <add name="PATH" value="D:\local\AppData\npm;%PATH%" xdt:Locator="Match(name)" 
    xdt:Transform="InsertIfMissing" />    
   </environmentVariables>
  </runtime> 
 </system.webServer> 
</configuration>

但是如果你想使用这种方式,你需要先设置环境变量然后安装canvas-data-cli。或者它将删除 D:\local\AppData\npm.

下的所有文件

在此之后您应该可以 运行 编码,但是您上传的代码似乎有一些问题。

是不是因为我的文件夹中缺少一些文件。也许你会在你的环境中取得成功。

防止错误:你最好升级你的节点版本,你可以去门户中的应用程序设置,添加设置WEBSITE_NODE_DEFAULT_VERSION,值为8.8.1或者你想要的其他版本。

如果您还有其他问题,请告诉我。

我通过在全局范围安装相同的包解决了我的问题,即 canvas-data-cli 在

我的-site.scm.azurewebsites.net/debugConsole

npm install canvas-data-cli -g

我认为问题在于,canvasDataCli sync 命令创建了一个新进程,该进程位于 运行 at my-site.scm.azurewebsites.net/ 并且我从

我的-site.scm.azurewebsites.net/dev/wwwroot/