Webpack生成构建文件路径已关闭

时间:2017-07-31 20:16:23

标签: reactjs webpack webpack-dev-server webpack-2

我正在运行此命令以尝试&生成生产webpack构建:

rimraf ./build/* && webpack -p --progress --config webpack.production.js

但是,当我打开build/index.html时,由于位置关闭,它无法加载大量文件。

  1. 无法为bundle.js文件添加正确的位置。它加载它:/bundle.js。但是bundle.js文件实际上与构建文件夹中的index.html文件位于同一目录中,因此它应该像./bundle.js一样加载它 enter image description here
  2. 如果我更正bundle.js路径,它仍会为资产设置错误的路线: enter image description here
  3. 有趣的是,当我运行时,我的应用目前与webpack dev服务器配合使用:webpack-dev-server --inline --progress --config webpack.dev.js

    以下是我当前的webpack.production.js文件:

    var webpack = require('webpack');
    var path = require('path');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {  
      devtool: 'source-map',
      devServer: {
        historyApiFallback: true, // This will make the server understand "/some-link" routs instead of "/#/some-link"
      },
      entry: [
        './src/scripts' // This is where Webpack will be looking for the entry index.js file
      ],
      output: {
        path: path.join(__dirname, 'build'), // This is used to specify folder for producion bundle
        filename: 'bundle.js', // Filename for production bundle
        publicPath: '/'
      },
      resolve: {
        modules: [
          'node_modules', 
          'src',
          path.resolve(__dirname, 'src/scripts'),
          path.resolve(__dirname, 'node_modules')
        ], // Folders where Webpack is going to look for files to bundle together
        extensions: ['.jsx', '.js'] // Extensions that Webpack is going to expect
      },
      module: {
        // Loaders allow you to preprocess files as you require() or “load” them. 
        // Loaders are kind of like “tasks” in other build tools, and provide a powerful way to handle frontend build steps.
        loaders: [
          {
            test: /\.jsx?$/, // Here we're going to use JS for react components but including JSX in case this extension is preferable
            include: [
              path.resolve(__dirname, "src"),
            ],
            loader: ['react-hot-loader']
          },
          {
            loader: "babel-loader",
    
            // Skip any files outside of your project's `src` directory
            include: [
              path.resolve(__dirname, "src"),
            ],
    
            // Only run `.js` and `.jsx` files through Babel
            test: /\.jsx?$/,
    
            // Options to configure babel with
            query: {
              plugins: ['transform-runtime'],
              presets: ['es2015', 'stage-0', 'react'],
            }
          },
          {
              test: /\.scss$/,
              loaders: ['style-loader', 'css-loader', 'sass-loader']
          }
        ]
      },
      plugins: [
        new webpack.NoEmitOnErrorsPlugin(), // Webpack will let you know if there are any errors
    
        // Declare global variables
        new webpack.ProvidePlugin({
          React: 'react',
          ReactDOM: 'react-dom',
          _: 'lodash'
        }),
    
        new HtmlWebpackPlugin({
          filename: 'index.html',
          template: './src/index.html',
          hash: true
        }),
    
        new webpack.optimize.UglifyJsPlugin({
          compress: {
            warnings: false
          },
          sourceMap: true
        }),
      ]
    }
    

    以防万一,这就是我当前的webpack.dev.js文件:

    var webpack = require('webpack');
    var path = require('path');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {  
      devtool: 'cheap-module-source-map',
      devServer: {
        historyApiFallback: true, // This will make the server understand "/some-link" routs instead of "/#/some-link"
      },
      entry: [
        'babel-polyfill',
        'webpack-dev-server/client?http://127.0.0.1:8080/', // Specify the local server port
        'webpack/hot/only-dev-server', // Enable hot reloading
        './src/scripts' // This is where Webpack will be looking for the entry index.js file
      ],
      output: {
        path: path.join(__dirname, 'build'), // This is used to specify folder for producion bundle
        filename: 'bundle.js', // Filename for production bundle
        publicPath: '/'
      },
      resolve: {
        modules: [
          'node_modules', 
          'src',
          path.resolve(__dirname, 'src/scripts'),
          path.resolve(__dirname, 'node_modules')
        ], // Folders where Webpack is going to look for files to bundle together
        extensions: ['.jsx', '.js'] // Extensions that Webpack is going to expect
      },
      module: {
        // Loaders allow you to preprocess files as you require() or “load” them. 
        // Loaders are kind of like “tasks” in other build tools, and provide a powerful way to handle frontend build steps.
        loaders: [
          {
            test: /\.jsx?$/, // Here we're going to use JS for react components but including JSX in case this extension is preferable
            include: [
              path.resolve(__dirname, "src"),
            ],
            loader: ['react-hot-loader']
          },
          {
            loader: "babel-loader",
    
            // Skip any files outside of your project's `src` directory
            include: [
              path.resolve(__dirname, "src"),
            ],
    
            // Only run `.js` and `.jsx` files through Babel
            test: /\.jsx?$/,
    
            // Options to configure babel with
            query: {
              plugins: ['transform-runtime', 'transform-decorators-legacy'],
              presets: ['es2015', 'stage-0', 'react'],
            }
          },
          {
              test: /\.scss$/,
              loaders: ['style-loader', 'css-loader', 'sass-loader']
          }
        ]
      },
      plugins: [
        new webpack.HotModuleReplacementPlugin(), // Hot reloading
        new webpack.NoEmitOnErrorsPlugin(), // Webpack will let you know if there are any errors
    
        // Declare global variables
        new webpack.ProvidePlugin({
          React: 'react',
          ReactDOM: 'react-dom',
          _: 'lodash'
        }),
    
        new HtmlWebpackPlugin({
          filename: 'index.html',
          template: './src/index.html',
          hash: false
        })
      ]
    }
    

    任何想法我做错了什么?

2 个答案:

答案 0 :(得分:0)

面临类似的问题。在我的网站上设置了技巧,在webpack.dev.js中设置了output.publicPath: "/",在webpack.prod.js中设置了output.publicPath: "./"

答案 1 :(得分:0)

在运行 npm run watch 时遇到同样的错误,本地开发仍然有效,但在部署到演示服务器后,应用程序在错误的 js 文件 url 上崩溃。

原因:

我的 webpack.mix.js 中的一些更改开始编译浏览器找到的 index.html 文件,而不是我使用的 app.blade

通过设置修复路径:publicPath: './public/' (请注意,这是一个相对路径)。此外,我通过在 inject: false, 部分设置 HtmlWebpackPlugin({ 并使用资产('/...')逻辑删除了生成的 url。