node.jsES6中import报错解决方案

7,258 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

每天一小步,成功一大步。大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习每天小知识。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

解决node.js使用import导入模块报错的问题。亲测成功。

报错代码

f:\nodejsDemo\lab03\testingStatsES6.js:1
import {mean,stddev} from "./statsES6";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:988:16)
    at Module._compile (internal/modules/cjs/loader.js:1036:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
    at internal/main/run_main_module.js:17:47

原理

ES6发布后module已经成为了标准,使用export导出接口,使用import来导入模块。node.js已经实现了ES6的大部分新特性,但是由于采用的CommonJS规范,所以使用require来导入模块,使用exports或者module.exports来导出模块。

解决方案

知道了原理我们就能想出解决方案了。我们可以使用babel相关模块来进行转义支持,通过使用babel编译,使其转化为node.js的模块。

下载babel相关模块

在终端执行以下语句进行模块安装。

1. npm install --save babel-core
2. npm install --save babel-preset-env
3. npm install babel-cli -g

创建babel.babelrc文件。

在根目录下创建babel.babelrc文件。内容为:

{
    "presets": [
        "env"
    ],
    "plugins": []
}

运行指令

一般node.js文件是使用

node server.js

使用import的js文件就需要使用以下命令

babel-node --presets env server.js

案例

来试一下。

const sum = (x,y) => x+y;
const square = x => x*x;
const mean = data => data.reduce(sum)/data.length;
const stddev = d =>{
    let m = mean(d);
    return Math.sqrt(d.map(x => x-m)
                                    .map(square)
                                    .reduce(sum)/(d.length-1));
}
//使用export 导出两个接口mean用来计算平均值,stddev用来计算标准差
export {mean,stddev};
import {mean,stddev} from "./statsES6";
const data = [10,20,80,15,30,60];
let average = mean(data);
let sd = stddev(data);
console.log(average);
console.log(sd);

image.png

结语

以上就是我对node.js中使用import导入模块报错的一些浅见,如有错误之处,欢迎掘友们批评指正。希望能对大家有所帮助。