版本兼容性问题Azurefunction的Node和DirectlineJS es6导出
最终目标:
使用DirectLine秘密创build运行Botframework-DirectlineJS并绑定到Bot (Framework)
天青function。
问题:
上面提到的Botframework-DirectlineJS使用es6 export和Azurefunction支持Node 6.5.0 max doc 。 因此,如何在Azure函数的index.js文件中成功导入DirectlineJS?
Errror
``` 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
'use strict'; require('import-export'); require ('./importexportwrapper'); let directLine = new DirectLine({ secret: 'DirectlineSecretValue-here' } );
-
importexportwrapper.js
import { DirectLine } from 'botframework-directlinejs';
不幸的是,似乎像import-export
或node-hook
与函数/ edgejs(我们用来运行节点的环境)不能很好地协作。
几个选项来尝试:
- 作为部署过程的一部分,使用babel将es6转换为es5。
- 将函数写入
index.ts
(index.ts
),它将自动import
转换 – 虽然这可能会失败的模块依赖项,我还没有尝试过
你有三个select:1)使用ES5编写你的代码,2)使用Babel设置一个任务运行器(gulp / grunt / npm脚本),将你的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函数Node.js的版本。