我的
mjs
文件可以导入其他
mjs公司
文件,但无法导入
js
导入链中的文件。在下面的例子中,想象甘蓝。js是第三方库,例如。
lodash-es/isObject.js
例如
// apple.mjs
import {banana} from './banana.mjs';
..和
// banana.mjs
import {kale} from './kale.js';
export function banana() {};
和
kale.js
是
// kale.js
export function kale() {};
export function kite() {}
我发现以下错误:-
$node——实验模块/测试/苹果。mjs(节点:389272)
实验警告:ESM模块加载程序是实验性的。
“甘蓝”
检查完成时(内部/加载程序/模块作业:75:27)
在moduleJob。链接。然后(内部/加载程序/模块作业js:58:11)
在
尝试了自定义解析功能,但仍然没有成功:
import url from 'url';
import path from 'path';
const JS_EXTENSIONS = new Set(['.js', '.mjs']);
export default function resolve(specifier, parentModuleURL, defaultResolve ) {
console.log('resolving '+specifier);
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
return defaultResolve(specifier, parentModuleURL);
}
const resolved = new url.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'
};
}
我是这样运行的:
node --experimental-modules --loader ./custom-loader.mjs apple.mjs
节点版本v8.9.1
我发现以下错误:
SyntaxError: Unexpected token export
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:599:28)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at createDynamicModule (internal/loader/ModuleRequest.js:43:15)
at setExecutor (internal/loader/ModuleWrap.js:40:23)
at file:///C:/Users/user/projs/dev/my-project-js/test/es2015/test/kale.js:8:36
更新---使用
@std/esm
根据答案接近
所有代码都在这里
https://github.com/yogeshgadge/mjs-mixed-loaders.git
//index.js
require = require("@std/esm")(module,{"esm":"js"});
module.exports = require("./apple.mjs").default;
然后我按如下方式运行(现在我正在吃羽衣甘蓝:):-
$ node index.js
eating kale with some lodash
package.json
这种方法不起作用。
$ node -r @std/esm apple.mjs
C:\Users\myuser\projs\github\mjs-in-harmony\node_modules\lodash-es\isObject.js:31
export default isObject;
^^^^^^
SyntaxError: Unexpected token export
at createScript (vm.js:74:10)
at Object.runInThisContext (vm.js:116:10)
at Module._compile (module.js:537:28)
at Object.Module._extensions..js (module.js:584:10)