开发者问题收集

webpack 模块未找到问题

2020-07-26
802

我是 Webpack 新手(之前用过 Gulp),现在我想将现有应用程序从 Gulp 移到 Webpack。

但我遇到了一些问题,例如未找到模块:错误:无法解析“/var/www/project”中的“/src/app/index.js”或 未找到模块:错误:无法解析“/var/www/project”中的“/src/styles/main.scss” ,并且我在 enty 链上使用的每个文件都存在同样的问题。

这是我的文件结构:

  • package.json
  • .env
  • .env.example
  • webpack.conf.js
  • src/
    • app/
      • index.js
      • 其他 js/vue 相关文件
    • styles/
      • main.scss 和所有相关样式
    • public/
      • index.html
      • favicon.ico
      • images/
        • 所有图片

这是我的 webpack.conf.js :

const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const CopyWebpackPlugin = require('copy-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const Dotenv = require('dotenv-webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const path = require('path');

const webpack = require('webpack');
const ENV = process.env.APP_ENV;
const isDev = ENV === 'dev'
const isProd = ENV === 'prod';
function setDevTool() {
  if (isDev) {
    return 'inline-source-map';
  } else if (isProd) {
    return 'source-map';
  } else {
    return 'eval-source-map';
  }
}
const config = {
  entry: {
    'bundle.min.css': [
      path.resolve(__dirname, '/src/styles/main.scss'),
    ],
    'bundle.js': [
      path.resolve(__dirname, '/src/app/index.js')
    ]
  },
  output: {
    filename: '[name]',
    path: path.resolve(__dirname, 'dist'),
  },
  devtool: setDevTool(),
  module: {
    rules: [
      // fonts loader
      {
        loader: 'file-loader',
        options: {
          name: '[name].[ext]',
          outputPath: 'fonts/'
        }
      },
      // babel loader
      {
        test: /\.js$/,
        use: 'babel-loader',
        exclude: [
          /node_modules/
        ]
      },
      // raw html loader
      {
        test: /\.html/,
        loader: 'raw-loader'
      },
      // css loader
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: 'css-loader'
        })
      },
      // sass loader
      {
        test: /\.(sass|scss)$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['style-loader', 'css-loader', 'sass-loader']
        })
      },
      // vue loader
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      // image url inliner
      {
        test: /\.(jpe?g|png|gif)$/,
        loader: 'url-loader',
        options: {
          limit: 50 * 1024
        }
      },
      // svg url inliner
      {
        test: /\.svg$/,
        loader: 'svg-url-loader',
        options: {

          limit: 50 * 1024,
          noquotes: true,
        }
      },
      // image loader
      {
        test: /\.(jpg|png|gif|svg)$/,
        loader: 'image-webpack-loader',
        enforce: 'pre'
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: __dirname + "/src/public/index.html",
      inject: 'body'
    }),
    new Dotenv({safe: true}),
    new ExtractTextPlugin("bundle.min.css"),
    new VueLoaderPlugin()
  ],
  devServer: {
    contentBase: './src',
    port: 7700,
  }
}

if (isProd) {
  config.plugins.push(
    new UglifyJSPlugin(),
    new CopyWebpackPlugin([{
      from: __dirname + '/src/public'
    }])
  );
};
module.exports = config;                                        

我不明白为什么它找不到这些文件,例如错误中提到的“/var/www/project//src/styles/main.scss”是正确的路径?

1个回答

尝试从 path.resolve() 中删除初始斜杠。例如:

path.resolve(__dirname, '/src/styles/main.scss')

应为:

path.resolve(__dirname, 'src/styles/main.scss')

SaidbakR
2020-07-26