javascript - 遇到 webpack 模块解析问题

标签 javascript reactjs npm webpack

我安装了一个全局 npm 模块,我们称它为 abc-cli。现在我有一个使用此命令运行的 React app:abc-cli run

abc-cli 基本上做的是获取 app 中的组件并使用其源代码编译和运行它。

现在我想将这个 app 作为一个单独的 npm 模块发布。所以我使用 Webpack 来生成包。在解析模块时,webpack 无法解析属于 abc-cli 的模块。很明显,webpack 不知道 abc-cli 是什么。

所以我的问题是如何确保 webpack 解析模块依赖关系?有什么方法可以让 webpack 在打包时运行/编译 abc-cli

或者最坏的情况可能是如何抑制模块解析警告或忽略这些模块。因为我知道它会出现。

例子:

在我的 app 中,我有一个导入语句

import SomeComponent from '@abc/components';

现在在打包时,webpack 不会解析这个模块:

Module not found: Error: Can't resolve '@abc/components' in '/home/shishir/app/src/shared/visualizations'

如果我能解决这个问题会很有帮助。

我的 webpack 配置:

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'index.js',
    libraryTarget: 'commonjs2'
  },
  resolve: {
    extensions: ['.mjs', '.js', '.jsx']
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        include: path.resolve(__dirname, 'src'),
        exclude: /(node_modules|bower_components|build)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              'es2015',
              'react',
              'stage-2'
            ]
          }
        }
      },
      {
        test: /\.css$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" }
        ]
      },
      {
        test: /\.(png|svg|jpg|gif)$/,
        use: [
          'file-loader'
        ]
      }
    ]
  },
  externals: {
    'react': 'commonjs react'
  }
};

我尝试了 null-loader :

{
        test: require.resolve("@abc/components"),
        use: 'null-loader'
}

但这并没有帮助。

最佳答案

这是两种通知 webpack 额外位置以查找模块的方法。

// webpack.config.js

module.exports = {
  //...
  resolve: {
    // 1. add extra `node_modules` directory to search path
    modules: ['node_modules', '/abs_path/to/global/node_modules'],
    // 2. use alias to explicitly map a module name to its exact location
    alias: {
      '@abc': '/abs_path/to/global/node_modules/@abc'
    }
  }
};

对于您的用例,如果您只有 @abc 模块位于常规本地 node_modules 目录之外,我建议您使用 resolve.alias.

来源:https://webpack.js.org/configuration/resolve/#resolvemodules .

关于javascript - 遇到 webpack 模块解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55236672/

相关文章:

javascript - html 地理位置 : Unknown error acquiring position

javascript - 使用 jQuery 删除列表项

javascript - Angular.js 和 Node.js 在页面加载时调用 Node

javascript - React map 更改索引号并破坏条件渲染

javascript - webpack 构建中出现意外标记 "export"

json - 有没有办法自动将 package.json 的最新或星号(*)标记更改为特定版本?

python - 为使用 nodejs 调用的脚本导入 python 包

javascript - 使用 Vue.js 和express.js 交付 Html 文件

javascript - 为什么我的 redux 存储将属性映射到具有单个属性和值的对象?

reactjs - Redux 表单 : returning a promise from asyncValidate using async functions