>>>>>>> 24b6b53 ( 【init】)
命令格式如下:
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:')) {
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里面,这样设置:
<<<<<<< HEAD
export NODE_OPTIONS ='--experimental-modules --loader YOUR_PATH/loader.mjs'
=======
export NODE_OPTIONS ='--experimental-modules --loader YOUR_PATH/loader.mjs'
>>>>>>> 24b6b53 ( 【init】)
然后再执行es6语法的js文件的时候,就可以直接: node xxx.js了。