Physijs-webpack 库因要求而失败

Physijs-webpack library fails by require

在 Web 应用程序中,我已经有一些用 "require" 声明并被 webpack 理解的包:

我是这样使用的:

var THREE = require('three');

var OrbitControls = require('three-orbit-controls')(THREE);

为了添加物理,我尝试添加库 physijs-webpack:

var PhysiJS = require('physijs-webpack')(THREE);

它在 "npm run build" 处失败说: 找不到模块:错误:无法解析 'physijs-webpack'

在控制台(Chrome 开发工具)中显示以下错误:

"app.js:17 Uncaught Error: Cannot find module "physijs-webpack"
    at webpackMissingModule (app.js:17)
    at Object.defineProperty.value (app.js:17)
    at __webpack_require__ (bootstrap 460ca68f8e6f1e90ea58:19)
    at Object.<anonymous> (html5-entities.js:190)
    at __webpack_require__ (bootstrap 460ca68f8e6f1e90ea58:19)
    at module.exports.ctor.super_ (bootstrap 460ca68f8e6f1e90ea58:62)"

这是我的 webpack.config 文件:

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

module.exports = {
    entry: './src/js/app.js',
    devtool: 'inline-source-map',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js',
        publicPath: '/dist'
    }
};

依赖项是:

    "devDependencies": {
        "script-loader": "^0.7.0",
        "webpack": "^3.5.4",
        "webpack-dev-server": "^2.7.1",
        "yarn": "^0.27.5"
    },
    "dependencies": {
        "physijs": "^0.0.4",
        "physijs-webpack": "^0.0.2",
        "requirejs": "^2.3.4",
        "three": "^0.86.0",
        "three-orbit-controls": "^82.1.0"
    }
}

你能推荐一下吗,我做错了什么?

我遇到并解决了这个问题,方法是按照@ https://github.com/agilgur5/physijs-webpack

找到的 webpack 详细信息

基本上...

npm install -S agilgur5/physijs-webpack

npm install -D worker-loader

我还必须更新我的 webpack 配置

// webpack.config.js
{
  module: {
    rules: [
      {
        test: /\.worker\.js$/,
        use: { loader: 'worker-loader' }
      }
    ]
  }
}

参考文献:

tl;dr - 您一直在使用由其他人发布的损坏版本。使用 v0.1.0 或更高版本并阅读 https://github.com/agilgur5/physijs-webpack/

中的说明

大家好,我是 physijs-webpack repo 的创建者。

根据 old version of the README and this Twitter thread,直到 2018 年 9 月我决定再次尝试时,我的端口一直在进行中,构建失败。其他人在没有告诉我的情况下将我的 repo 发布到 NPM,因此你最初在 NPM 上找到的包已损坏。

2018 年 9 月,我重写了大部分回购协议,并设法找到了让它工作的方法。当时,我要求人们通过 agilgur5/physijs-webpack 安装,因为我无法控制 NPM 包。那个月晚些时候,我获得了包的控制权,现在已经发布了 v0.1.0 和 v0.1.1,它们具有成功的工作构建。现在您可以通过 physijs-webpack 安装并按照包或 repo 的说明进行操作 - 即也将 worker-loader 安装为 devDependency.

旧的、不起作用的 NPM 版本 (v0.0.2) 也将很快取消发布,以避免像这样的混淆。


在您的 Webpack 配置上:

这里的另一个答案是更新你的 Webpack 配置,但那是 不正确的 和无关的(它甚至没有.worker.js 分机)。 physijs-webpack 实际上 专门 有意 使用 in-line loader 这样你 就不会 必须更新你的 webpack 配置。


physijs NPM 包中:

我还注意到您的 package.json 中有 physijs -- NPM 包是由同一个人创建的,并且是 physijs-webpack 的副本。它于 2018 年 9 月取消发布,同时我获得了 physijs-webpack NPM 包的所有权。


关于 three 集成:

我注意到的另一件事是 three 在你的 package.json 中。虽然这是较早的不工作版本所必需的,但在当前工作版本中,它现在是 peerDependency。您不再需要将 THREE 作为参数传递,但您仍然需要安装它,因为 PhysiJS 的大多数用法无论如何都需要您使用三个。它也被固定到 r73 版本的三个,因为这是 PhysiJS 支持/兼容的最后一个版本。