javascript - 为 nodejs 动态导入添加新扩展

标签 javascript node.js javascript-import

如何为 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/

相关文章:

javascript - 不使用 underscoreJS 如何做到这一点?

javascript - 避免从 imports 的 imports 中引入代码

javascript - react 超出最大调用堆栈大小

javascript - 为什么包含警报模式会影响 CSS 旋转方向?

javascript - 无法在 'appendChild' : Only one element on document allowed 上执行 'Node'

javascript - AngularJS 的 $routeProvider templateUrl 总是使用 Express 返回 404

javascript - 如何像 JSFiddle 中那样创建唯一的 session ID?

javascript - AWS Lambda SNS 目标在失败或成功时不起作用

javascript - 闭包编译器无法编译保留字 "default"