【发布时间】:2022-01-23 05:17:38
【问题描述】:
我正在尝试创建代码来测试是否可以在各种 GeoJSON 功能中找到特定的纬度/经度坐标。
如果我这样做:
import d3 from 'd3-geo'; // or: import * as d3 from 'd3-geo' // makes no difference
console.log(d3.geoContains);
...运行使用:node --require ts-node/register app.ts
...我收到此错误:
错误 [ERR_REQUIRE_ESM]:不支持来自 /Users/kshetline/temp/geo/app.ts 的 ES 模块 /Users/kshetline/temp/geo/node_modules/d3-geo/src/index.js 的 require()。 而是将 /Users/kshetline/temp/geo/app.ts 中 index.js 的 require 更改为在所有 CommonJS 模块中都可用的动态 import()。 在对象。 (/Users/kshetline/temp/geo/app.ts:6:34) 在 Module.m._compile (/Users/kshetline/temp/geo/node_modules/ts-node/dist/index.js:735:29) 在 Object.require.extensions。 [as .ts] (/Users/kshetline/temp/geo/node_modules/ts-node/dist/index.js:737:16) { 代码:'ERR_REQUIRE_ESM' }
所以我尝试按照错误消息的建议使用import():
import('d3-geo').then(d3 => console.log(d3.geoContains));
...这只是让我得到一个更短但类似的错误消息:
错误 [ERR_REQUIRE_ESM]:不支持来自 /Users/kshetline/temp/geo/app2.ts 的 ES 模块 /Users/kshetline/temp/geo/node_modules/d3-geo/src/index.js 的 require()。 而是将 /Users/kshetline/temp/geo/app2.ts 中 index.js 的 require 更改为在所有 CommonJS 模块中都可用的动态 import()。 在 /Users/kshetline/temp/geo/app2.ts:21:43 { 代码:'ERR_REQUIRE_ESM' }
我在tsconfig.json 中尝试了不同的模块类型和目标,但这并没有帮助。这是我为演示此问题而创建的精简测试项目中的tsconfig.json:
{
"compilerOptions": {
"target": "es2021",
"module": "commonjs",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
这是package.json:
{
"name": "geo",
"version": "1.0.0",
"description": "",
"main": "app.js",
"author": "",
"license": "MIT",
"dependencies": {
"d3-geo": "^3.0.1"
},
"devDependencies": {
"@types/d3-geo": "^3.0.2",
"ts-node": "^10.4.0",
"typescript": "^4.5.5"
}
}
我从来没有遇到过让我在尝试进行简单导入时遇到这么麻烦的 npm 库。我可以让它在纯 JavaScript 中运行,但即便如此,它也必须是动态的 import(),这是一种不得不使用库的烦人方式。
任何想法如何使这项工作更好?
【问题讨论】:
标签: javascript node.js typescript d3-geo