关于Node服务如何使用ES6 import的疑问

在研究服务端渲染,之前服务端代码都是用require来导入模块的。
但是搜了一些关于服务端渲染的文章。大多都是import导入的模块,如下这个:

clipboard.png

但是Node服务端运行会报错,不支持这个import,这怎么解决?也用babel-loader?又找到了如下文章:

解决node不兼容import

但是我在babel转换的过程中报了一大堆错误。比如:
Can't resolve 'tinyliquid'
Can't resolve 'fs'

求问这该怎么解决?


使用了babel-register可以正常启动了,但是koa-router会报错

这是我的入口文件

    require("babel-register")({
        'presets': ["es2015", 'react', 'stage-3'],
    });
    
    require('babel-polyfill');
    
    require('./server.js');
    

这是server.js

    let koa = require('koa');
    let views = require('koa-views');
    let statics = require('koa-static');
    let router = require('koa-router')();
    
    import React from 'react';
    // import {renderToString} from 'react-dom/server';
    // import App from './views/server/components/App.jsx';
    
    let app = new koa();
    
    app.use(views(__dirname + '/views/server', {map: {html: 'nunjucks'}}));
    
    app.use(async (ctx, next) => {
        console.log(ctx.request.url);
        await next();
    })
    
    app.use(statics('.'));
    
    router.get('/', async function (ctx, next) {
        // await ctx.render('index', {
        //     root: renderToString(<App/>)
        // });
        await ctx.render('index.html');
    });
    
    app.use(router.routes()).use(router.allowedMethods());
    
    app.listen(8080, () => {
        console.log('服务启动,localhost:8080')
    });

报了如下错误:

clipboard.png

阅读 13.9k
3 个回答

增加了plugins: ['add-module-exports']这个插件OK了

直接运行的话,你应该使用 babel-register 而不是 babel-loader(用于 Webpack),

https://babeljs.io/docs/usage...

注意,启动文件不能使用 es6 import/export 语法

clipboard.png
node已经支持import,当然最好还是用babel-register
注意babel-register在当前文件无效,只有之后引入的文件才有效

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏