我正在为客户端javascript代码制作一个typescript项目。
在我使用打字稿之前,我导入了一个这样的模块(这是 es6 中的香草 js)
< code > import * as THREE from ' https://THREE js . org/build/THREE . module . js ';
但是使用打字稿,我用 npm install
安装了模块,然后像这样导入它
< code > import * as THREE from ' THREE ';
问题是,当我运行编译的 js 代码时,我收到此浏览器 js 错误:
Uncaught TypeError: Failed to resolve module specifier "three". Relative references must start with either "/", "./", or "../".
因为从“三”导入*为THREE;
现在在编译后的js文件中。
我该如何解决这个问题?
谢谢
tsconfig.json
{
"compilerOptions": {
"outDir": "dist/",
"rootDir": "./src",
"sourceMap": false,
"noImplicitAny": true,
"moduleResolution": "Node",
"resolveJsonModule": true,
"module": "ESNext",
"target": "ESNext",
"lib": [
"ESNext", "DOM"
],
"allowJs": false,
"alwaysStrict": true,
"typeRoots": [
"node_modules/@types"
]
},
"include": [
"src/",
"src/**/*.json"
],
"exclude": [
]
}
与NPM一起安装的包通常位于node_modules
文件夹中。这意味着您可以通过其相对路径访问库:
import * as THREE from './node_modules/tree/build/three.module.js';
为了在客户端使用它,需要一个捆绑器。
我建议使用网络包或雪包。雪包是新的,有很多非常酷的功能。
这里假设您正在使用TypeScript来编译要在浏览器中使用的独立es模块,这些模块加载在HTML标记中,如< code >
虽然不完全简单,但实现这一点相对简单:
为了满足编译器,请确保您已经安装了类型化脚本
和@类型/三
:
npm install typescript @types/three
然后,将此路径映射添加到您的./tsconfig.json
:
{
...
"compilerOptions": {
"baseUrl": ".",
"paths": {
"https://threejs.org/build/three.module.js": ["node_modules/@types/three"]
},
...
},
...
}
这是我用来测试的完整配置:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"https://threejs.org/build/three.module.js": ["node_modules/@types/three"]
},
"esModuleInterop": true,
"exactOptionalPropertyTypes": true,
"isolatedModules": true,
"lib": [
"esnext",
"dom",
"dom.iterable"
],
"module": "esnext",
"moduleResolution": "node",
"noUncheckedIndexedAccess": true,
"outDir": "dist",
"strict": true,
"target": "esnext",
"useUnknownInCatchVariables": true
},
"include": [
"./src/**/*"
]
}
现在,您将在使用说明符导入的模块中为
。例如,当我键入THREE
找到正确的类型。“https://threejs.org/build/three.module.js“THREE.Mesh
时,TypeScript IntelliSense向我显示它是这样的类型:
class Mesh<TGeometry extends THREE.BufferGeometry = THREE.BufferGeometry, TMaterial extends THREE.Material | THREE.Material[] = THREE.Material | THREE.Material[]>
下面是我的测试中的示例模块:
./src/index.ts
:
import * as THREE from 'https://threejs.org/build/three.module.js';
console.log(THREE);
现在,当您使用tsc
编译项目时,您将得到这个输出,它是一个有效的ECMAScript模块,并将使用从托管URL导入的“three”模块:
./dist/index.js
:
import * as THREE from 'https://threejs.org/build/three.module.js';
console.log(THREE);
问题内容: 我是node.js和javascript的初学者。 我想在HTML代码中包含外部javascript文件。这是html代码“ index.html”: 并且,这是JavaScript代码“ simple.js”: 当我直接在网络浏览器(例如Google Chrome)上打开“ index.html”时,它可以工作。(“ Hello”消息应显示在屏幕上。) 但是,当我尝试通过node.j
问题内容: 我正在尝试打字稿。在hello世界阶段它工作正常。我现在正在尝试使用npm模块: = 这不起作用: -> -> 看着打字稿文档和谷歌没有帮助。其他S /O问题未得到回答 元素: 打字稿1.8最新 是的,lodash已安装并存在于我的文件系统中(已选中) 我也做了 变种或不起作用 我试图调整tsconfig.json选择在其他的答案建议 ,并在一些答案建议,仍然无法正常工作 我们如何在打
pnpm下 如何打包项目的 node_modules? 我想要把node_modules 压缩并转移,结果提示不少依赖找不到指定的路径是为啥.
我正试图将http包添加到我的示例flutter项目中。然而,它不断地失败。 它给出了以下O/P 这是我的pubspec.yaml Flutter:用途-材料-设计:真资产:-assets/login_icon.png 任何想法,I/P将不胜感激。
我正在开发一个以Vuetify(Vue.js)为前端的应用程序,该应用程序通过api与laravel后端服务器进行通信。 我试图使一个系统的通知与laravel-echo-server与socket.io.并使用laravel-echo到客户端。 我在客户端组件中用于测试连接是否工作的代码是: 这是laravel echo服务器的代码。json 我试图修改aporigins,但没有成功。事件已调度
问题内容: 我想在某种类型的全局项目目录中有一个模块,以便可以在使用该通用代码的所有其他项目中包含该模块。 但是,我怎样才能告诉Maven父母包括并编译这个全局共享模块呢?以下内容不起作用: 父pom.xml: 结果是: 问题答案: 如果您在该全局项目上运行,它将被安装在本地存储库中。然后,其他项目可以将其引用为依赖项: 这种简单化方法的缺点是,其他项目只有在检出并运行后才能编译。 一种更高级的方