【问题标题】:Webpack 2: cannot resolve moduleWebpack 2:无法解析模块
【发布时间】:2016-11-04 01:53:15
【问题描述】:

我有一个这样的项目:

root/
    webpack-config.js
    app/
       app.js
       js/
         dep.js
    core/
        module.js

这里是 webpack 配置文件:

module.exports = {
    entry: './app/app.js',
    output: {
        path: __dirname,
        filename: "[name]-bundle.js"
    },
    module: {
        loaders: [
            { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/     }          
        ]
    },
    resolve: {
      modulesDirectories: ['core']
    }
    ...

在 app.js 中,我有:

import local_dep from './js/dep';
import myModule from 'module';

这在 webpack 1.x 中按预期工作,但 myModule 模块没有在 webpack 2 中解析,我得到“模块未找到:无法解析 'module' in ... \app”。

似乎 modulesDirectories 条目被忽略了,基本 URL 对应于条目的文件夹。

如何使用 webpack 2 使模块正确解析?

【问题讨论】:

  • Christopher Davies 有正确答案,你应该选择它。

标签: javascript webpack webpack-2


【解决方案1】:

编辑:正如其他人所指出的,对于 Webpack 2,类似这样的工作:

{
  resolve: {
    extensions: ['.js', '.jsx'],
    modules: ['node_modules', path.resolve(__dirname, 'core')]
  },
}

对于 Webpack 1,我有一个包含以下条目的设置:

config.resolve = {
  // Allows us to include js and jsx files without specifying the extension
  extensions: ['', '.jsx', '.js'],

  root: [path.resolve('./core')]
};

【讨论】:

  • 实际上“全局”是指这是一个全局模块,而不是全局对象。我已经编辑了我的问题。
  • 如果您阅读了文档,正如上面 laggingreflex 所引用的,“root”不再是 Webpack 2 配置解析语法的一部分。只是“模块”。
  • 这个答案对于 Webpack v1.x 来说是正确的,但是升级到 Webpack v2.x 时,resolve.modules 对象替换了 modulesDirectoriesroot
【解决方案2】:

来自:http://moduscreate.com/webpack-2-tree-shaking-configuration/

在 Webpack 2 中,来自 rootmodulesDirectoriesfallback 设置的解析器将合并为一个属性 - modules。以下是我们如何在 Webpack 2 中解析文件和模块位置:

  resolve: {
    modules: [
      path.resolve('./client'),
      'node_modules'
    ]
  },

您可以在modules 中指定多个目录,但请确保不要忘记node_modules,否则npm 包依赖项将无法加载。


所以在你的情况下是以前的情况:

resolve: {
  modulesDirectories: ['core']
}

现在需要

resolve: {
  modules: ['core'] // also 'node_modules' 
}

【讨论】:

    【解决方案3】:

    感谢 Christopher Davies,我通过添加以下内容解决了问题:

    resolveLoader: {
      root: path.join(__dirname, 'node_modules')
    },
    resolve: {
        root: ['./core']
    }
    

    我必须添加 resolveLoader 行,否则我会收到关于无法加载的 babel-loader 的错误。

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 2021-07-21
      • 2021-05-21
      • 2017-09-21
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2021-05-13
      相关资源
      最近更新 更多