【问题标题】:Webpack Missing Module 'Module Not Found'Webpack 缺少模块“未找到模块”
【发布时间】:2016-01-16 04:54:57
【问题描述】:

我目前正在开发一个 react webpack babel 等网站,并尝试第一次构建。构建成功,但是当我打开浏览器时出现以下错误:

Uncaught Error: Cannot find module "/Users/michael.nakayama/Documents/Development/jamsesh/node_modules/webpack/node_modules/node-libs-browser/node_modules/process/browser.js"

此模块存在。在我的浏览器中转到该实际网址会显示有问题的文件。但我无法弄清楚为什么 webpack 找不到它。我不知道这是 babel6 问题还是 webpack 问题,或者两者都不是。我的配置文件如下所示:

var webpack = require('webpack');
var cleanWebpack = require('clean-webpack-plugin');

var ignore = new webpack.IgnorePlugin(new RegExp("/(node_modules|ckeditor)/"))

module.exports = {
  devtool: 'inline-source-map',
  entry: './lib/client/entry',
  output: {
    path: __dirname + '/public/js',
    filename: 'app.js',
    publicPath: 'http://localhost:8081/js/',
  },
  plugins: [
    ignore,
  ],
  resolve: {
    extensions: ['', '.js'],
    moduleDirectories: ['./node_modules']
  },
  module: {
    loaders: [
      {
        test: /\.js?$/,
        loaders: ['babel-loader?presets[]=react,presets[]=es2015,plugins[]=transform-es2015-classes,plugins[]=transform-react-jsx'],
        exclude: /(node_modules)/,
      }
    ]
  }
}

而我的webpack服务器文件如下:

var WebpackDevServer = require('webpack-dev-server');

var webpack = require('webpack');
var config = require('../../webpack.config');

var server = new WebpackDevServer(webpack(config), {
  // webpack-dev-server options
  publicPath: config.output.publicPath,
  stats: { colors: true },
});

server.listen(8081, 'localhost', function() {});

这是我安装的软件包:

"devDependencies": {
    "babel-cli": "^6.3.17",
    "babel-core": "^6.3.26",
    "babel-loader": "^6.2.0",
    "babel-plugin-syntax-jsx": "^6.3.13",
    "babel-plugin-transform-es2015-classes": "^6.4.0",
    "babel-plugin-transform-react-jsx": "^6.3.13",
    "babel-preset-es2015": "^6.3.13",
    "babel-preset-react": "^6.3.13",
    "body-parser": "^1.14.2",
    "clean-webpack-plugin": "^0.1.5",
    "express": "^4.13.3",
    "history": "^1.17.0",
    "jade": "^1.11.0",
    "nodemon": "^1.8.1",
    "path": "^0.12.7",
    "pg": "^4.4.3",
    "react": "^0.14.6",
    "react-dom": "^0.14.3",
    "react-hot-loader": "^1.3.0",
    "react-router": "^1.0.3",
    "webpack": "^1.12.9",
    "webpack-dev-server": "^1.14.0"
  }

entry.js:

var React = require('react');
var ReactDOM = require('react-dom');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var routes = require('../routes');

// -v x.13.x
/**Router.run(routes, Router.HistoryLocation, function (Handler, state) {
  React.render(<Handler/>, document.getElementById('react-app'));
});**/

var node = document.getElementById('react-app');
// -v 1.0.0
ReactDOM.render(<Router history={createBrowserHistory()} routes={routes}/> , node);

另外提醒一下,我已尝试卸载并重新安装我的所有软件包。我已经尝试专门安装 node-libs-browser 模块。谢谢。

【问题讨论】:

  • 尝试删除 node_modules 及之后:“npm cache clean && npm install”
  • @DmitryYaremenko 没有用。我已经试过了。但我又做了一次验证。还是没有成功。
  • lib/client/entry.js 怎么样?或者尝试只使用 console.log('hello')
  • 我添加了 entry.js,我得到的错误只是来自 require('react')。调试控制台把我带到了 ReactDOM,这就是它爆炸的地方。
  • 为什么你需要在 node_modules 上忽略插件?

标签: javascript webpack babeljs


【解决方案1】:

node_modules 上的忽略插件问题。在webpack.config.js,你有:

var ignore = new webpack.IgnorePlugin(new RegExp("/(node_modules|ckeditor)/"))
...
plugins: [
  ignore,
],

来自Ignore Plugin 文档:

不要为匹配提供的 RegExp 的请求生成模块。

Webpack 尝试使用名称为 node_modules/process/browserrequire 模块来获取 React 模块,但由于它被忽略而失败。

如果您确实需要,请尝试从 Ignore Plugin 中删除 node_modules 或少写全局条件。

【讨论】:

  • 你是神。我在以前的项目中使用了几乎所有软件包的旧版本,这很好。但是删除它是有效的。非常感谢。
【解决方案2】:

导入 nodeExternals 对我有用。

import nodeExternals from 'webpack-node-externals';

这是我的 server.webpack.config:

import path from 'path';
import nodeExternals from 'webpack-node-externals'; // changes

const CONTEXT = path.join( __dirname, "../.." ),
  INPUT_SERVER_DIR = path.join( CONTEXT, "server" ),
  OUTPUT_SERVER_DIR = path.join( CONTEXT, "dist/server" );

export default [
  {
    name: 'server',
    target:  'node',
    context: INPUT_SERVER_DIR,
    node: {
      __dirname: false
    },
    entry: './server',
    devtool : 'source-map',
    output: {
      path: OUTPUT_SERVER_DIR,
      filename: "server.js"
    },
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /node_modules/,
          loader: "babel-loader"
        }
      ]
    },
    resolve: {
      extensions: ['.js']
    },
    **externals : [ nodeExternals() ]**
  }
];

【讨论】:

  • 安装了 webpack-node-externals 就解决了我的问题。
  • @JonasKello 这对我也有用!感谢您的评论。
猜你喜欢
  • 2018-04-03
  • 2018-12-05
  • 2019-01-15
  • 2020-11-16
  • 2017-04-09
  • 2017-07-25
  • 2017-07-23
  • 2021-02-13
  • 2017-03-22
相关资源
最近更新 更多