Webpack 无法解析并指向我的 node_modules

acr*_*ene 5 javascript node.js three.js webpack webpack-dev-server

我根据手册https://threejs.org/docs/#manual/en/introduction/Import-via-modules将 Three.js 库作为模块运行时遇到问题

这就是我所做的:

创建 package.json

npm init
Run Code Online (Sandbox Code Playgroud)

安装 webpack

npm i --save-dev webpack webpack-cli
Run Code Online (Sandbox Code Playgroud)

安装 Three.js

npm install three
Run Code Online (Sandbox Code Playgroud)

使用以下代码创建 index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <title>three.js webgl - cloth simulation</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <style>
        body {
            background-color: #cce0ff;
            color: #000;
        }

        a {
            color: #080;
        }
    </style>
</head>

<body>
    <script type="module" src="./src/index.js"></script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

创建一个 src 文件夹并将一个名为 index.js 的文件放在我导入三个的 src 文件夹中

import * as THREE from 'three';
Run Code Online (Sandbox Code Playgroud)

安装 liveserver 以运行服务器:

npm install live-server -g
Run Code Online (Sandbox Code Playgroud)

运行服务器:

live-server
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

未捕获的类型错误:无法解析模块说明符“三”。相对引用必须以“/”、“./”或“../”开头。

但是,它使用此语法提供完整路径:

import * as THREE from '../node_modules/three/build/three.module.js';
Run Code Online (Sandbox Code Playgroud)

为什么 webpack 没有解析到我的 node_modules 的路径?

我也试过创建一个webpack.config.js文件:

module.exports = {
    resolve: {
        modules: ['./node_modules']
    }
};
Run Code Online (Sandbox Code Playgroud)

但结果相同:

未捕获的类型错误:无法解析模块说明符“三”。相对引用必须以“/”、“./”或“../”开头。

任何提示都非常感谢!

更新:

我尝试使用 Babel 来处理 ES6:

安装:

npm install --save-dev @babel/core @babel/preset-env 
npm install --save-dev babel-loader
Run Code Online (Sandbox Code Playgroud)

根据以下内容编辑 y webpack.config.js: https ://createapp.dev/webpack

const webpack = require('webpack');
const path = require('path');

const config = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        use: 'babel-loader',
        exclude: /node_modules/
      }
    ]
  }
};

module.exports = config;
Run Code Online (Sandbox Code Playgroud)

添加了 .babelrc :

{
    "presets": [
        "@babel/preset-env"
    ]
}
Run Code Online (Sandbox Code Playgroud)

但还是没有成功

Sim*_*ris 5

可以将 Three.js 与 ES6 模块和浏览器中的 npm 结合使用,无需 webpack 或任何其他捆绑包,方法如下:

npm install three
Run Code Online (Sandbox Code Playgroud)

打开一个 HTML 页面,并链接到一个type="module"脚本:

  <script type="module" src="./main.js"></script>
Run Code Online (Sandbox Code Playgroud)

您必须main.js按照以下格式编写:

import * as THREE from './node_modules/three/src/Three.js';
Run Code Online (Sandbox Code Playgroud)

这会起作用。请注意,导入语句必须采用这种形式,指向文件,并带有./.js

  • 为什么不是像 `import * as THREE from 'third';` 这样简单? (6认同)