主页
主页
文章目录
  1. Table of Contents
  2. 1 1. 使用mjs文件扩展名
  3. 2 2. 使用loader

NodeJs 支持Es6

Node10现在是最新版本,es6也是可以支持了.

1 1. 使用mjs文件扩展名

js文件以mjs作为扩展名的话,可以这样来直接执行:

node --experimental-modules xxxx.mjs

这种方式比较麻烦,毕竟每个文件都要以mjs结尾。同时导致很多编辑器对mjs识别有问题。

2 2. 使用loader

命令格式如下:

NODE_OPTIONS='--experimental-modules --loader ./loader.mjs' node x.js

这样的话,只要定义一个mjs的loader就好了。 官方给的有一个loader的示例,还是好用的。

import path from 'path';
import process from 'process';
import Module from 'module';

const builtins = Module.builtinModules;
const JS_EXTENSIONS = new Set(['.js', '.mjs']);

const baseURL = new URL('file://');
baseURL.pathname = `${process.cwd()}/`;

export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) {
if (builtins.includes(specifier)) {
return {
url: specifier,
format: 'builtin'
};
}
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
// For node_modules support:
// return defaultResolve(specifier, parentModuleURL);
throw new Error(
`imports must begin with '/', './', or '../'; '${specifier}' does not`);
}
const resolved = new URL(specifier, parentModuleURL);
const ext = path.extname(resolved.pathname);
if (!JS_EXTENSIONS.has(ext)) {
throw new Error(
`Cannot load file with non-JavaScript file extension ${ext}.`);
}
return {
url: resolved.href,
format: 'esm'
};
}

这样创建了一个loader,暂且命名为: loader.mjs. 为了每次命令不用加这个mjs,可以把NODEOPTIONS设置到环境变量中去。 比如当前我用的fish shell里,可以这样设置:

set NODE_OPTIONS '--experimental-modules  --loader YOUR_PATH/loader.mjs'

bash-shell里面,这样设置:

export NODE_OPTIONS ='--experimental-modules  --loader YOUR_PATH/loader.mjs'

然后再执行es6语法的js文件的时候,就可以直接: node xxx.js了。

Author: HeHe

Created: 2018-09-28 Fri 22:56

Validate