Javascript ECMAScript 6对node.js及其不同包(如express body_解析器)的本地支持
我正在尝试将旧的nodejs(版本6.x)rest服务项目迁移到最新的nodejs(版本9.6.1)rest服务项目,并希望在没有任何transplier的情况下遵循ECMAScript 6规范 当前项目使用express、body parser、moment、multer、cors、ethereumjs tx、secp256k1、requirejs和其他一些nodejs模块,所以我的问题是,所有这些不同的模块以及nodejs是否在本地支持ECMAScript 6规范 在互联网上,我看到了许多使用bable transplier的解决方案,但我不想采用这种方法 我再次发现了express的ECMAScript 6实现,但它仍然不起作用。默认导入和使用带@的装饰时失败 ECMAScript 6对node.js的支持也是如此,it模块已经实现,或者我应该等一段时间 编辑 我同意ECMAScript 6中不支持decorator模式,但导入和导出也不起作用,我尝试运行以下代码Javascript ECMAScript 6对node.js及其不同包(如express body_解析器)的本地支持,javascript,node.js,express,ecmascript-6,Javascript,Node.js,Express,Ecmascript 6,我正在尝试将旧的nodejs(版本6.x)rest服务项目迁移到最新的nodejs(版本9.6.1)rest服务项目,并希望在没有任何transplier的情况下遵循ECMAScript 6规范 当前项目使用express、body parser、moment、multer、cors、ethereumjs tx、secp256k1、requirejs和其他一些nodejs模块,所以我的问题是,所有这些不同的模块以及nodejs是否在本地支持ECMAScript 6规范 在互联网上,我看到了许多使
import express from 'express'
import restful from 'express-restful-es6'
var server = express()
console.log(restful)
restful.configure(server,{
dirname: '/projectlocation' + '/resources'
})
server.listen(9000)
console.log("Listening on port 9000 .....")
但有以下错误
> ethereum-rest-api@1.0.0 start /projectlocation/ethereum-rest-api
> /nodelocation/bin/node --experimental-modules index.mjs
(node:31753) ExperimentalWarning: The ESM module loader is experimental.
{ Rest: [Function: Rest],
middleware: [Function: middleware],
default: Restful {} }
TypeError: restful.configure is not a function
at file:///projectlocation/index.mjs:7:9
at ModuleJob.run (internal/loader/ModuleJob.js:102:14)
at <anonymous>
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! project@1.0.0 start: `/nodelocation/bin/node --experimental-modules index.mjs`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the project@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
以太坊休息区-api@1.0.0启动/项目位置/以太坊rest api
>/nodelocation/bin/node——实验模块索引.mjs
(节点:31753)实验警告:ESM模块加载程序是实验性的。
{Rest:[函数:Rest],
中间件:[功能:中间件],
默认值:Restful{}
TypeError:restful.configure不是函数
在file:///projectlocation/index.mjs:7:9
在ModuleJob.run(internal/loader/ModuleJob.js:102:14)
在
npm错误!代码失效循环
npm错误!错误1
npm错误!project@1.0.0开始:`/nodelocation/bin/node——实验模块index.mjs`
npm错误!退出状态1
npm错误!
npm错误!失败project@1.0.0开始脚本。
npm错误!这可能不是npm的问题。上面可能还有其他日志输出。
再次@lorefnon如果模块不支持ECMAScript 6样式的导入/导出,我将能够在代码中导入它,例如,如果我尝试使用最新的表达式。js我可以使用ECMAScript 6语法导入它,而不使用任何transplier。ES6完全向后兼容。因此,库和SDK不必做任何额外的事情来符合ES6 当然,他们可能(也可能不)选择使用ES Next功能,但通常的做法是,任何使用其目标节点版本不支持的功能的库,都会在发布过程中传输其源代码,这样用户就不必费心传输库 如果您确保应用程序使用node支持的ES6功能,则不必使用transpiler 我再次发现了express的ECMAScript 6实现,但它仍然不起作用。默认导入和使用带@的装饰时失败 他们的示例使用节点当前不支持的decorator语法 但是,如果要避免透明化,可以将公开的函数用作普通函数,而不是装饰器:
@Rest('/api')
class ApiResource {
use(){
//authorize
console.info("authorize");
this.next();
}
}
基本上用于:
class ApiResource_ {
use(){
//authorize
console.info("authorize");
this.next();
}
}
const ApiResource = Rest('/api')(ApiResource_)
ES6完全向后兼容。因此,库和SDK不必做任何额外的事情来符合ES6 当然,他们可能(也可能不)选择使用ES Next功能,但通常的做法是,任何使用其目标节点版本不支持的功能的库,都会在发布过程中传输其源代码,这样用户就不必费心传输库 如果您确保应用程序使用node支持的ES6功能,则不必使用transpiler 我再次发现了express的ECMAScript 6实现,但它仍然不起作用。默认导入和使用带@的装饰时失败 他们的示例使用节点当前不支持的decorator语法 但是,如果要避免透明化,可以将公开的函数用作普通函数,而不是装饰器:
@Rest('/api')
class ApiResource {
use(){
//authorize
console.info("authorize");
this.next();
}
}
基本上用于:
class ApiResource_ {
use(){
//authorize
console.info("authorize");
this.next();
}
}
const ApiResource = Rest('/api')(ApiResource_)
似乎模块正在使用。这不是ES6的功能。我相信这是建议的未来功能(ES6之外),您要么需要一个支持装饰器的环境,要么需要对其进行传输。您能展示一下您试图在这个库中使用的代码吗?node.js的当前8.x版本非常支持ES6,甚至支持许多ES7功能。您不必等待ES6支持。另一方面,装饰程序不是ES6功能。@jfriend00 2请检查我更新的帖子,我在其中添加了一些代码和错误消息。如果您在导入和导出方面有问题,为什么接受一个根本没有解决该问题的答案?或者,问题实际上不是由导入/导出引起的吗?似乎模块正在使用。这不是ES6的功能。我相信这是建议的未来功能(ES6之外),您要么需要一个支持装饰器的环境,要么需要对其进行传输。您能展示一下您试图在这个库中使用的代码吗?node.js的当前8.x版本非常支持ES6,甚至支持许多ES7功能。您不必等待ES6支持。另一方面,装饰程序不是ES6功能。@jfriend00 2请检查我更新的帖子,我在其中添加了一些代码和错误消息。如果您在导入和导出方面有问题,为什么接受一个根本没有解决该问题的答案?或者,这个问题实际上不是由导入/导出引起的吗?如果您查看问题中提到的实际库,它使用的是decorator,而不是ES6的一部分。所以,这个问题实际上不是关于ES6特性的,而是关于ES6之外的特性。这并不完全正确。他们的示例确实使用了decorator,但他们发布的代码却没有。因此,如果应用程序代码不使用decorator,而是将它们用作函数调用,那么您可以在不使用透明的情况下使用库