installation.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <!DOCTYPE html><html lang="zh"><head>
  2. <meta charset="utf-8">
  3. <title>安装</title>
  4. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  5. <meta name="twitter:card" content="summary_large_image">
  6. <meta name="twitter:site" content="@threejs">
  7. <meta name="twitter:title" content="Three.js – 安装">
  8. <meta property="og:image" content="https://threejs.org/files/share.png">
  9. <link rel="shortcut icon" href="../../files/favicon_white.ico" media="(prefers-color-scheme: dark)">
  10. <link rel="shortcut icon" href="../../files/favicon.ico" media="(prefers-color-scheme: light)">
  11. <link rel="stylesheet" href="../resources/lesson.css">
  12. <link rel="stylesheet" href="../resources/lang.css">
  13. <script type="importmap">
  14. {
  15. "imports": {
  16. "three": "../../build/three.module.js"
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <div class="container">
  23. <div class="lesson-title">
  24. <h1>安装</h1>
  25. </div>
  26. <div class="lesson">
  27. <div class="lesson-main">
  28. <h2>项目结构</h2>
  29. <p>
  30. 每个 three.js 项目至少需要一个 HTML 文件来定义网页,以及一个 JavaScript 文件来运行你的 three.js 代码。下面的结构和命名方式并非强制要求,但为了保持一致性,本指南将始终使用这种方式。
  31. </p>
  32. <ul>
  33. <li>
  34. <i>index.html</i>
  35. <pre class="prettyprint notranslate lang-js" translate="no">
  36. &lt;!DOCTYPE html&gt;
  37. &lt;html lang="en"&gt;
  38. &lt;head&gt;
  39. &lt;meta charset="utf-8"&gt;
  40. &lt;title&gt;My first three.js app&lt;/title&gt;
  41. &lt;style&gt;
  42. body { margin: 0; }
  43. &lt;/style&gt;
  44. &lt;/head&gt;
  45. &lt;body&gt;
  46. &lt;script type="module" src="/main.js"&gt;&lt;/script&gt;
  47. &lt;/body&gt;
  48. &lt;/html&gt;
  49. </pre>
  50. </li>
  51. <li>
  52. <i>main.js</i>
  53. <pre class="prettyprint notranslate lang-js" translate="no">
  54. import * as THREE from 'three';
  55. ...
  56. </pre>
  57. </li>
  58. <li>
  59. <i>public/</i>
  60. <ul>
  61. <li>
  62. <i>public/</i> 文件夹有时也被称为"static"(静态)文件夹,因为其中的文件会原封不动地发布到网站上。通常纹理、音频和 3D 模型会放在这里。
  63. </li>
  64. </ul>
  65. </li>
  66. </ul>
  67. <p>
  68. 现在我们已经搭建好了基本的项目结构,接下来需要一种方式在本地运行项目并通过浏览器访问它。安装和本地开发可以通过 npm 和构建工具来完成,也可以通过从 CDN 导入 three.js 来实现。下面将分别介绍这两种方式。
  69. </p>
  70. <h2>方式一:使用 NPM 和构建工具安装</h2>
  71. <h3>开发</h3>
  72. <p>
  73. 从 [link:https://www.npmjs.com/ npm 包注册表] 安装并使用 [link:https://eloquentjavascript.net/10_modules.html#h_zWTXAU93DC 构建工具] 对大多数用户来说是推荐的方式——你的项目依赖越多,就越可能遇到静态托管难以解决的问题。使用构建工具时,导入本地 JavaScript 文件和 npm 包无需 import map 即可直接使用。
  74. </p>
  75. <ol>
  76. <li>
  77. 安装 [link:https://nodejs.org/ Node.js]。我们需要它来管理依赖和运行构建工具。
  78. </li>
  79. <li>
  80. <p>
  81. 在项目文件夹中打开 [link:https://www.joshwcomeau.com/javascript/terminal-for-js-devs/ 终端],安装 three.js 和构建工具 [link:https://vitejs.dev/ Vite]。Vite 仅在开发过程中使用,不会成为最终网页的一部分。如果你更喜欢使用其他构建工具也没问题——我们支持任何能导入 [link:https://eloquentjavascript.net/10_modules.html#h_zWTXAU93DC ES Modules] 的现代构建工具。
  82. </p>
  83. <pre class="prettyprint notranslate" translate="no">
  84. # three.js
  85. npm install --save three
  86. # vite
  87. npm install --save-dev vite
  88. </pre>
  89. <aside>
  90. <details>
  91. <summary>安装后项目中多出了 <i>node_modules/</i> 和 <i>package.json</i>,它们是什么?</summary>
  92. <p>
  93. npm 使用 <i>package.json</i> 来记录你安装的每个依赖的版本。如果有其他人和你一起开发项目,他们只需运行 <i>npm install</i> 就能安装相同版本的依赖。如果你使用版本控制,请提交 <i>package.json</i>。
  94. </p>
  95. <p>
  96. npm 将每个依赖的代码安装到新的 <i>node_modules/</i> 文件夹中。当 Vite 构建你的应用时,它会看到对 'three' 的导入,并自动从这个文件夹中获取 three.js 文件。<i>node_modules/</i> 文件夹仅在开发时使用,不应上传到你的网站托管服务商或提交到版本历史中。
  97. </p>
  98. </details>
  99. <details>
  100. <summary>Using three.js with TypeScript</summary>
  101. <p>
  102. Community-maintained TypeScript type definitions for three.js are available at [link:https://github.com/three-types/three-ts-types three-types/three-ts-types].
  103. </p>
  104. </details>
  105. </aside>
  106. </li>
  107. <li>
  108. 在终端中运行:
  109. <pre class="prettyprint notranslate" translate="no">npx vite </pre>
  110. <aside>
  111. <details>
  112. <summary><i>npx</i> 是什么?</summary>
  113. <p>
  114. npx 随 Node.js 一起安装,用于运行 Vite 等命令行程序,这样你就不必自己在 <i>node_modules/</i> 中查找正确的文件。如果你愿意,也可以将 [link:https://vitejs.dev/guide/#command-line-interface Vite 的常用命令] 添加到 [link:https://docs.npmjs.com/cli/v9/using-npm/scripts package.json:scripts] 列表中,然后使用 <i>npm run dev</i> 来代替。
  115. </p>
  116. </details>
  117. </aside>
  118. </li>
  119. <li>
  120. 如果一切顺利,你会在终端中看到一个类似 <i>http://localhost:5173</i> 的 URL,打开该 URL 即可查看你的 Web 应用。
  121. </li>
  122. </ol>
  123. <p>
  124. 页面将是空白的——你已经准备好<a href="creating-a-scene.html">创建一个场景</a>了。
  125. </p>
  126. <p>
  127. 如果你想在继续之前了解更多关于这些工具的信息,请参阅:
  128. </p>
  129. <ul>
  130. <li>
  131. [link:https://threejs-journey.com/lessons/local-server three.js journey: 本地服务器]
  132. </li>
  133. <li>
  134. [link:https://cn.vite.dev/guide/cli Vite: 命令行接口]
  135. </li>
  136. <li>
  137. [link:https://developer.mozilla.org/zh-CN/docs/Learn_web_development/Extensions/Client-side_tools/Package_management MDN: 包管理基础]
  138. </li>
  139. </ul>
  140. <h3>生产环境</h3>
  141. <p>
  142. 稍后,当你准备部署 Web 应用时,只需让 Vite 执行生产构建——<i>npx vite build</i>。应用使用的所有内容都会被编译、优化并复制到 <i>dist/</i> 文件夹中。该文件夹的内容即可直接托管到你的网站上。
  143. </p>
  144. <h2>方式二:从 CDN 导入</h2>
  145. <h3>开发</h3>
  146. <p>不使用构建工具进行安装需要对上述项目结构做一些修改。</p>
  147. <ol>
  148. <li>
  149. <p>
  150. 我们在 <i>main.js</i> 中从 'three'(一个 npm 包)导入了代码,但浏览器并不知道这意味着什么。在 <i>index.html</i> 中,我们需要添加一个 [link:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap import map] 来定义从哪里获取该包。将以下代码放在 <i>&lt;head>&lt/head></i> 标签内,样式之后。
  151. </p>
  152. <pre class="prettyprint notranslate lang-js" translate="no">
  153. &lt;script type="importmap">
  154. {
  155. "imports": {
  156. "three": "https://cdn.jsdelivr.net/npm/three@&lt;version&gt;/build/three.module.js",
  157. "three/addons/": "https://cdn.jsdelivr.net/npm/three@&lt;version&gt;/examples/jsm/"
  158. }
  159. }
  160. &lt;/script>
  161. </pre>
  162. <p>
  163. 别忘了将 <i>&lt;version&gt;</i> 替换为 three.js 的实际版本号,例如 <i>"v0.149.0"</i>。最新版本可以在 [link:https://www.npmjs.com/package/three?activeTab=versions npm 版本列表] 中找到。
  164. </p>
  165. </li>
  166. <li>
  167. <p>
  168. 我们还需要运行一个<i>本地服务器</i>来将这些文件托管到浏览器可以访问的 URL 上。虽然技术上可以双击 HTML 文件在浏览器中打开,但出于安全原因,我们后续要实现的重要功能在以这种方式打开页面时无法正常工作。
  169. </p>
  170. <p>
  171. 安装 [link:https://nodejs.org/ Node.js],然后在项目目录中运行 [link:https://www.npmjs.com/package/serve serve] 来启动本地服务器:
  172. </p>
  173. <pre class="prettyprint notranslate" translate="no">npx serve .</pre>
  174. </li>
  175. <li>
  176. 如果一切顺利,你会在终端中看到一个类似 http://localhost:3000 的 URL,打开该 URL 即可查看你的 Web 应用。
  177. </li>
  178. </ol>
  179. <p>
  180. 页面将是空白的——你已经准备好 [link:#manual/introduction/Creating-a-scene 创建一个场景] 了。
  181. </p>
  182. <p>
  183. 还有许多其他本地静态服务器可供选择——有些使用 Node.js 以外的语言,有些是桌面应用程序。它们的工作方式基本相同,下面列出了一些替代方案。
  184. </p>
  185. <details>
  186. <summary>更多本地服务器</summary>
  187. <h3>命令行</h3>
  188. <p>命令行本地服务器从终端窗口运行。可能需要先安装相应的编程语言。</p>
  189. <ul>
  190. <li><i>npx http-server</i> (Node.js)</li>
  191. <li><i>npx five-server</i> (Node.js)</li>
  192. <li><i>python -m SimpleHTTPServer</i> (Python 2.x)</li>
  193. <li><i>python -m http.server</i> (Python 3.x)</li>
  194. <li><i>php -S localhost:8000</i> (PHP 5.4+)</li>
  195. </ul>
  196. <h3>图形界面</h3>
  197. <p>图形界面本地服务器以应用程序窗口的形式在你的计算机上运行,可能带有用户界面。</p>
  198. <ul>
  199. <li>[link:https://greggman.github.io/servez Servez]</li>
  200. </ul>
  201. <h3>代码编辑器插件</h3>
  202. <p>一些代码编辑器提供插件,可按需启动简单服务器。</p>
  203. <ul>
  204. <li>[link:https://marketplace.visualstudio.com/items?itemName=yandeu.five-server Five Server],适用于 Visual Studio Code</li>
  205. <li>[link:https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer Live Server],适用于 Visual Studio Code</li>
  206. <li>[link:https://atom.io/packages/atom-live-server Live Server],适用于 Atom</li>
  207. </ul>
  208. </details>
  209. <h3>生产环境</h3>
  210. <p>
  211. 当你准备部署 Web 应用时,只需将源文件推送到你的网站托管服务商——无需构建或编译任何内容。这种方式的缺点是,你需要小心地确保 import map 与应用所需的所有依赖(以及依赖的依赖!)同步更新。如果托管这些依赖的 CDN 暂时宕机,你的网站也会停止工作。
  212. </p>
  213. <p>
  214. <i><b>重要提示:</b>所有依赖都应从同一版本的 three.js 和同一个 CDN 导入。混合使用不同来源的文件可能导致代码被重复引入,甚至以意想不到的方式破坏应用。</i>
  215. </p>
  216. <h2>附加组件</h2>
  217. <p>
  218. three.js 开箱即用地包含了 3D 引擎的基础功能。其他 three.js 组件——如控制器、加载器和后期处理效果——属于 [link:https://github.com/mrdoob/three.js/tree/dev/examples/jsm addons/] 目录的一部分。附加组件不需要单独<i>安装</i>,但需要单独<i>导入</i>。
  219. </p>
  220. <p>
  221. 下面的示例展示了如何导入 three.js 以及 `OrbitControls` 和 `GLTFLoader` 附加组件。在必要时,每个附加组件的文档或示例中也会提到这一点。
  222. </p>
  223. <pre class="prettyprint notranslate lang-js" translate="no">
  224. import * as THREE from 'three';
  225. import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
  226. import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
  227. const controls = new OrbitControls( camera, renderer.domElement );
  228. const loader = new GLTFLoader();
  229. </pre>
  230. <p>
  231. 也有一些优秀的第三方项目可用于 three.js。这些需要单独安装——请参阅<a href="libraries-and-plugins">库和插件</a>。
  232. </p>
  233. <h2>下一步</h2>
  234. <p>
  235. 你现在已经准备好<a href="creating-a-scene.html">创建一个场景</a>了。
  236. </p>
  237. </div>
  238. </div>
  239. </div>
  240. <script src="../resources/prettify.js"></script>
  241. <script src="../resources/lesson.js"></script>
  242. </body></html>
粤ICP备19079148号