如何为 Nodejs 动态导入添加新的文件扩展名? 我想添加我自己的文件类型,我们称之为 .jszip。 (不,这只是一个示例,我真正想要的与 zip 无关)。
说我有 包.json:
{
"name": "test",
"scripts": {
"zip": "node --experimental-modules test.js"
}
}
测试.js:
const fs = require('fs');
const Module = require('module');
function loadJsZip(module, filename) {
console.log('In loadJsZip');
const content = fs.readFileSync(filename, 'utf8');
// Do something to content
module._compile(content, filename);
}
require.extensions['.jszip'] = loadJsZip;
Module._extensions['.jszip'] = loadJsZip;
function loadJs(relativePath) {
import(f).then((module) => {
console.log(`imported from ${filename}:${module}`);
}).catch((err) => {
console.log(`While importing:${err}`);
});
}
loadJs('./testfile.jszip');
我得到:
(node:20412) ExperimentalWarning: The ESM module loader is experimental.
While importing:TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension: c:\...\testfile.jszip
最佳答案
似乎不支持其他文件类型:https://nodejs.org/api/esm.html#esm_import_statements
对我的情况有用的是获取正常的 require
并使用它。所以我导入 .graphql
文件使用:
import {createRequire} from 'module';
const require = createRequire(import.meta.url);
require('graphql-import-node/register');
const myQuery = require('./myquery.graphql');
graphql-import-node 包在幕后执行 require.extension[] =
:
require.extensions['.graphql'] = loadPlainFile
但这开始变得疯狂了。你可能最好使用 Webpack 或其他东西。
关于javascript - 为 nodejs 动态导入添加新扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58934330/