【问题标题】:Webpack production build does not load anythingWebpack 生产构建不加载任何东西
【发布时间】:2016-04-27 01:39:52
【问题描述】:

一段时间以来,我一直在使用 React 和 Webpack 开发一个应用程序。我的开发环境运行良好,一切都使用 webpack-dev-server 正确加载。

我决定运行应用程序的生产构建,以查看最终产品在大小方面的外观,并观察 webpack 产品构建的一般输出。

事实证明,运行webpack -p,虽然它确实产生了输出(稍后会详细介绍),但当我在浏览器中点击该站点时根本不会加载任何内容。快速检查输出告诉我我的组件代码都没有进入webpack -p 构建。

图像和 HTML 复制到我的 src (dev) 文件夹中,但是我的 JS 包输出非常小 - 文件 (main.js) 只有 246 字节。

这是运行 webpack -p 的输出

$ npm run build

> project@0.1.0 build /Users/me/Development/project
> NODE_ENV=production webpack -p --bail --progress --config webpack.config.babel.js

Hash: 9e5f6974ce21c920a375
Version: webpack 1.12.10
Time: 2003ms
            Asset       Size  Chunks             Chunk Names
       index.html    1.45 kB          [emitted]
  images/edit.svg  524 bytes          [emitted]
images/search.svg    1.19 kB          [emitted]
          main.js  246 bytes    0, 1  [emitted]  javascript, html
    + 219 hidden modules

当我运行项目的开发版本时,输出明显不同......我知道开发服务器依赖项在那里,并且代码没有被缩小......而且,最重要的是 - 当一切都按预期工作时运行开发服务器。

$ npm start

> project@0.1.0 start /Users/me/Development/project
> webpack-dev-server --hot --display-modules --config webpack.config.babel.js

http://localhost:3333/
webpack result is served from /
content is served from /Users/me/Development/project/dist
Hash: 1b34ed58f9e323966ada
Version: webpack 1.12.10
Time: 2745ms
            Asset       Size  Chunks             Chunk Names
       index.html    1.45 kB          [emitted]
  images/edit.svg  524 bytes          [emitted]
images/search.svg    1.19 kB          [emitted]
          main.js    1.54 MB    0, 1  [emitted]  html, javascript

这是我的 webpack.config.babel.js 文件:

import webpack from 'webpack';
import path from 'path';

import ModernizrWebpackPlugin from 'modernizr-webpack-plugin';
import modernizrConfig from './modernizr.config';

const appDir = path.resolve(__dirname, './src');
const distDir = path.resolve(__dirname, './dist');
const nodeModulesDir = path.resolve(__dirname, './node_modules');

const excludeDirs = /(node_modules|bower_components)/;

module.exports = {
    entry: {
        javascript: appDir + '/main.js',
        html: appDir + '/index.html'
    },
    output: {
        path: distDir,
        filename: 'main.js',
    },
    devServer: {
        contentBase: distDir,
        inline: true,
        port: 3333
    },
    resolve: {
        extensions: ['', '.js', '.es6'],
        modulesDirectories: [
            'node_modules',
            './src'
        ]
    },
    plugins: [
        // new webpack.optimize.CommonsChunkPlugin('common.js'),
        // new ModernizrWebpackPlugin(modernizrConfig),
    ],
    sassLoader: {
        sourceMap: false,
        includePaths: [
            appDir,
            nodeModulesDir,
            nodeModulesDir + '/breakpoint-sass/stylesheets/',
            nodeModulesDir + '/susy/sass'
        ]
    },
    module: {
        loaders: [
            { // js/jsx
                test: /\.js?$/,
                exclude: excludeDirs,
                loader: 'babel',
                query: {
                    cacheDirectory: true,
                    presets: [
                        'es2015', 'react'
                    ]
                }
            },
            { // html
                test: /\.html$/,
                exclude: excludeDirs,
                loader: 'file?name=[name].[ext]'
            },
            { // images
                test: /\.(gif|png|jpg|jpeg|svg)$/,
                exclude: excludeDirs,
                loader: 'file?name=images/[name].[ext]'
            },
            { // sass
                test: /\.scss$/,
                exclude: excludeDirs,
                loader: 'style!css!sass'
            }
        ]
    }
}

我不认为我有一个特别复杂或不常见的设置,并且我已经尝试将所有内容从 es2015/es6 更改为 commonJS,结果相同。

我不知道问题可能在这里;希望有人能指出我遇到的一些明显错误,或者建议可以解决此问题的配置更新/更改。

感谢您花时间阅读所有内容!

【问题讨论】:

  • 我已经成功使用 webpack 几个月了,但我从来没有遇到过使用 HTML 文件作为入口点的情况。通常它只是一个 javascript 文件,它会输出到 dist 文件夹或类似文件夹,然后 那个 文件会被包含在某个其他 HTML 页面中。
  • 好吧,该死。那成功了。我不知道为什么我把它放在那里,或者我从哪里想到将 HTML 文件放在入口点。感谢您的快速修复!
  • 你能把它转换成答案并接受吗?谢谢。 :)
  • 不确定我该怎么做...除非您的评论是针对@rossipedia :)

标签: javascript reactjs webpack production


【解决方案1】:

正如我在评论中提到的,我已经成功使用 webpack 几个月了,但我从来没有遇到过使用 HTML 文件作为入口点。

通常你会使用 Webpack 来打包 javascript、css,有时还有图像(即:“assets”)以供 使用一个 html 文件。为该 HTML 文件提供服务超出了 Webpack 的职责范围。

我建议使用 Webpack生成最终的 javascript 包,然后使用其他方法(即:express 或其他 Web 服务器)来提供该文件和使用它的 html。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2012-10-18
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多