【问题标题】:Node js v5.9.1 and class 'import/export' statement [duplicate]Node js v5.9.1和类'import/export'语句[重复]
【发布时间】:2016-07-12 13:48:53
【问题描述】:

我已经在 windows 上安装了官方 node js 版本 v5.9.1 (x64),并尝试使用 ECMAScript 对类进行一些工作。我写了一个简单的类来测试:

"use strict";

export class httpWrapper {

    getPage(options){

      // some code

    }



};

我把这个类放在httpWrapper.js 中。如您所见,我在此处使用 export 来导出课程。然后我用这段代码创建了'main.js':

'use strict';


import httpWrapper from 'httpWrapper';  
let theInstance = new httpWrapper();

当我运行node main.js 时出现错误:

import httpWrapper from 'httpWrapper';
^^^^^^

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:142:18)
    at node.js:939:3

我还尝试使用 node 运行 httpWrapper.js,我得到了:

export class httpWrapper {
^^^^^^

    SyntaxError: Unexpected token export
        at exports.runInThisContext (vm.js:53:16)
        at Module._compile (module.js:387:25)
        at Object.Module._extensions..js (module.js:422:10)
        at Module.load (module.js:357:32)
        at Function.Module._load (module.js:314:12)
        at Function.Module.runMain (module.js:447:10)
        at startup (node.js:142:18)
        at node.js:939:3

node js 中是否提供导入/导出功能?因为这些语句不起作用,我不能使用导出/导入,你想如何导出/导入类?

【问题讨论】:

标签: javascript node.js syntax ecmascript-6 ecmascript-5


【解决方案1】:

现在浏览器不理解 ES6(ECMAScript2015),您需要使用像 babel 这样的编译器将 ES6 转换为 ES5。

【讨论】:

    【解决方案2】:

    你需要安装 npm install babel-cli -g ,然后运行 ​​babel-node main.js 或者如果你需要使用 node 运行,需要使用 require hook babel-register 创建 js。 示例:

    // runner.js 
    // I implement async in my modules, for this reason i need the preset stage-3 & es2015-node to support es6 features
    require("babel-register")({
      presets: ['es2015-node', 'stage-3']
    });
    
    // Import you main module with require and run
    // On this example I export http.createServer on server.js -> export default server
    
    var server = require('./server.js')
    
    server.listen(3000, function () {
        console.log('Server running')
    })
    
    // Server.js 
    import express from 'express'
    import { Server } from 'http'
    import bodyParser from 'body-parser'
    import morgan from 'morgan'
    
    var app = express()
    
    // configuracion
    app.use(morgan('combined'))
    app.use(bodyParser.urlencoded({extended: true}))
    app.use(bodyParser.json())
    app.set('view engine', 'jade')
    
    // Route para nuestra API
    var router = express.Router()
    
    router.get('/', function (req, res) {
      res.json({ message: 'hooray! welcome to our api!' })
    })
    
    app.use('/api', router)
    
    var server = Server(app) // require('http').createServer(app.callback())
    // app.listen(3000)
    
    console.log('Magic happens on port 3000')
    export default server
    

    现在只运行node runner.js 有时需要添加标志--harmony

    【讨论】:

    • 如果你需要在浏览器上使用 ES6,我推荐 Babel Transpilers:Webpack + Babel-loader 或 Gulp + gulp-babel。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2017-01-17
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多