当前位置: 首页 > 知识库问答 >
问题:

如何在打字稿项目中的客户端包含模块?

范翰海
2023-03-14

我正在为客户端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": [

    ]
}

共有3个答案

江俊能
2023-03-14

与NPM一起安装的包通常位于node_modules文件夹中。这意味着您可以通过其相对路径访问库:

import * as THREE from './node_modules/tree/build/three.module.js';
宰父俊民
2023-03-14

为了在客户端使用它,需要一个捆绑器。

我建议使用网络包或雪包。雪包是新的,有很多非常酷的功能

马淳
2023-03-14

这里假设您正在使用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选择在其他的答案建议 ,并在一些答案建议,仍然无法正常工作 我们如何在打

  • 我正试图将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: 结果是: 问题答案: 如果您在该全局项目上运行,它将被安装在本地存储库中。然后,其他项目可以将其引用为依赖项: 这种简单化方法的缺点是,其他项目只有在检出并运行后才能编译。 一种更高级的方

  • 我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等。 我们以前可以通过将必要的JAR放入jre文件夹的/ext/目录来实现这一点。然而,这导致了与tomcat服务器的库冲突,所以我们希望避免这种方法。 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当