我正在开发一个 P5 草图,我首先遵循 Daniel Shiffman 的“使用 Express 和 Node - WebSockets 和 p5.js 教程”(https://www.youtube.com/watch?v=2hhEOGXcCvg)。我想利用 Matter.js 物理,所以我用 npm ( npm install matterjs
) 安装了 matterjs。我想./node_modules/matterjs/dist/matter.js
在我的 p5.js 草图中导入文件,但我想不出正确的方法。
这是我的文件结构的样子:
./server.js
./public/
index.html
sketch.js
./node_modules/
matterjs/
dist/
matter.js
到目前为止,我已经尝试了以下方法:
1 . 将其视为matter.js
常规 JS 文件并在其中添加相对路径index.html
:
...
<body>
<script src="../node_modules/matterjs/dist/matter.js"></script>
...
sketch.js
然后我尝试使用Matter
该类
var Engine = Matter.Engine;
但这给了我一个“UnCaught ReferenceError: Matter is not defined ”
2 . 同样,包括 中的相对路径index.html
,但这次在 中sketch.js
,我尝试导入matter.js
:
import Matter from "matter";
这在导入行上给了我一个“意外的标识符”错误。Chrome 在下面放了一条红色波浪线Matter from "matter";
3 . 删除对matter.js
文件的引用index.html
,并将相对路径添加到导入行中sketch.js
:
import Matter from ""../node_modules/matterjs/dist/matter";
这给了我两个错误:
GET http://localhost:3000/node_modules/matterjs/dist/matter.js net::ERR_ABORTED 404 (Not Found) localhost:
Uncaught SyntaxError: Unexpected identifier
作为参考,这是我的一些文件的样子:
服务器.js
var express = require('express')
var app = express()
// get the port number from the command line args
const port = (process.argv.length > 2) ? process.argv[2] : 3000
console.log("Starting server on port " + port)
var server = app.listen(port)
app.use(express.static('public'))
草图.js
/*jshint esversion: 8 */
import Matter from "matter"; // this changed as I was trying different things
// matter.js
var Engine = Matter.Engine;
...
索引.html
<!DOCTYPE html><html><head>
<!-- root path to p5.js CDN: https://cdnjs.com/libraries/p5.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.sound.min.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8">
</head>
<body>
<script src="../node_modules/matterjs/dist/matter.js"></script> // this changed as I was trying different things
</body></html>
我知道我可以添加matter.js
对 Web 上托管的文件的引用,但我想避免在同一个项目中管理两个不同的事项实例。