2

最终目标:

使用 DirectLine 机密创建运行Botframework-DirectlineJS的Azure 函数。Bot (Framework)

问题:

上面提到的 Botframework-DirectlineJS 使用 ES6 导出和 Azure Functions 支持 Node 6.5.0 max doc。因此问题是如何在 Azure 函数的 index.js 文件中成功导入 DirectlineJS?

错误

```
2017-05-23T07:17:45.939 Exception while executing function: Functions.adapter. mscorlib: D:\home\site\wwwroot\adapter\importexportwrapper.js:1
(function (exports, require, module, __filename, __dirname) { import { DirectLine } from 'botframework-directlinejs';
                                                              ^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:76:16)
    at Module._compile (module.js:528:28)
    at Object.Module._extensions.(anonymous function) [as .js] (D:\home\site\wwwroot\node_modules\node-hook\index.js:73:14)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.require (module.js:483:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (D:\home\site\wwwroot\adapter\index.js:4:2)
    at Module._compile (module.js:556:32).
```

目前错误是在尝试使用npm import-export时

文件

  • index.js

    require('import-export');
    require ('./importexportwrapper');
    let directLine = new DirectLine({
        secret: 'DirectlineSecretValue-here'
      }
      );```
    
  • 导入导出包装器.js

    import { DirectLine } from 'botframework-directlinejs';

4

2 回答 2

1

Unfortunately it seems like import-export or node-hook doesn't play well with functions / edgejs (the environment we use to run node).

A couple options to try:

  • use babel to transpile es6 to es5 as a part of your deployment process.
  • write your function in typescript (index.ts) which will do import transpilation automatically - though this may fail for module dependencies, I haven't tried it out
于 2017-05-23T17:28:23.070 回答
1

您有三个选择:1) 使用 ES5 编写代码,2) 设置任务运行器(gulp/grunt/npm 脚本)以使用 Babel 将 ES6+ 代码转换为 ES5,或 3) 在 Typescript 中编写代码并将其编译为 ES5通过任务运行器/npm 脚本。

最直接的方法是:在您的文件中importexportwrapper.js使用require而不是import.

例子:

var directline = require('botframework-directlinejs');

Babel + Gulp 选项

安装:npm install --save-dev gulp gulp-babel

跑:

var gulp = require("gulp");
var babel = require("gulp-babel");

gulp.task("default", function () {
  return gulp.src("src/app.js") // your source files
    .pipe(babel())
    .pipe(gulp.dest("dist")); // your compiled output directory
});

在此处阅读有关 Azure Functions Node.js 版本的更多信息。

于 2017-05-25T21:15:32.720 回答