Javascript 在Node express服务器中导入Three.js模块

Javascript 在Node express服务器中导入Three.js模块,javascript,node.js,three.js,Javascript,Node.js,Three.js,我试图在我的html脚本中导入threeJs模块进行测试,当我下载three.js文件并有一个指向它的链接时,它就可以工作了。但是试图转换成模块给我带来了麻烦。我有以下代码来导入Three.js模块 <html lang="en"> <head> <title>ThreeJs Test</title> <meta charset="utf-8"> <meta name="vi

我试图在我的html脚本中导入threeJs模块进行测试,当我下载three.js文件并有一个指向它的链接时,它就可以工作了。但是试图转换成模块给我带来了麻烦。我有以下代码来导入Three.js模块

<html lang="en">
    <head>
        <title>ThreeJs Test</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
        <link type="text/css" rel="stylesheet" href="css/main.css">
    </head>
    <body>
        <script type="module">
            import * as THREE from '/node_modules/three/build/three.module.js';
        </script>

    </body>
</html>

我的路由和服务器工作得很好,但是当html/js文件需要从客户端导入模块时,我无法让它工作。如果这是一个简单的修复或者我做了一些愚蠢的事情,那也就不足为奇了。如果是这样,很抱歉。

您必须将
three.module.js
文件移动到Express提供服务的位置。例如,如果您有一个公共文件夹,其中有Express提供的其他静态文件,请将
three.module.js
文件放在那里,然后将指向该资源的正确URL放在html脚本中的导入语句中


换句话说,web浏览器无法访问
/node\u modules/three/build/three.module.js
。默认情况下,Express隐藏在web浏览器中的服务器端文件。

您的
静态
路由正在
threeTest
目录中查找文件,但
节点模块
目录(位于您的URL中)不在
threeTest


您需要一个静态路由,该路由使用一个实际包含
three.module.js

的目录,以便能够使用三个文件夹中的其他文件,例如loaders、lights等等。我需要将整个三个文件夹移动到node_模块中吗?还是three.modules.js文件就足够了?很容易混淆。您必须了解,html文件正在由web浏览器读取,而web浏览器只能访问由web服务器(Express)提供服务的文件。Express不提供
node\u modules
文件夹中的文件。如果希望web浏览器可以访问js文件,则必须在Express项目中创建一个公用文件夹,并将js文件放在该文件夹中。然后修改导入的url以指向该资源。这里有一个解释如何提供文件。完美的,它似乎做到了这一点。我现在应该知道了。感谢您的回答和快速回复。感谢您的澄清。帮助它立即工作。我应该知道这个。。。。
const path = require('path');
const router = express.Router();

const fileDir = path.join(__dirname, '../../pages/threeTest');

router.use('/', express.static(fileDir));
router.get('/', (req, res) => {
    res.sendFile(fileDir+'/html/index.html')
});

module.exports = router;