NodeJs 支持Es6
Node10现在是最新版本,es6也是可以支持了.
1. 使用mjs文件扩展名
js文件以mjs作为扩展名的话,可以这样来直接执行:
node --experimental-modules xxxx.mjs
这种方式比较麻烦,毕竟每个文件都要以mjs结尾。同时导致很多编辑器对mjs识别有问题。
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了。