我尝试了太多的事情,但都失败了:
const _ = require('lodash');
import _ from 'lodash';
import 'lodash';
const _ = require('https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js');
import _ from 'https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js';
import 'https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js';
答案肯定很简单,但我找了半个小时也没找到。我做错了什么?
Lodash 提供了 ESM 构建,可通过 CDN 获取:https://www.jsdelivr.com/package/npm/lodash-es。您可以动态导入此模块,但您必须使用自定义 HTTPS 加载器,因为 Node.js(自版本 22 起)不支持开箱即用的从 HTTPS 导入。
// https-loader.js
export const load = async (url, context, nextLoad) => {
if (url.startsWith("https://")) {
const res = await fetch(url);
return {
format: "module",
shortCircuit: true,
source: await res.text(),
};
}
return nextLoad(url);
};
// lodash-test.js
import _ from "https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js";
console.log(_.defaults({ a: 1 }, { a: 3, b: 2 }));
然后执行:
$ node --import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register(pathToFileURL("./https-loader.js"));' ./lodash-test.js
{ a: 1, b: 2 }
如果您出于某种原因想要在 Node.js 中使用 HTTPS 导入,请务必研究安全隐患。