Javascript 内容哈希、ExtractTextPlugin和HtmlWebpackPlugin

Javascript 内容哈希、ExtractTextPlugin和HtmlWebpackPlugin,javascript,sass,webpack,frontend,webpack-2,Javascript,Sass,Webpack,Frontend,Webpack 2,我想我将从我的网页配置开始 const webpack = require('webpack'); const path = require('path'); /** * Environment */ const nodeEnv = process.env.NODE_ENV || 'development'; const isProduction = nodeEnv === 'production'; const isDevelopment = !isProduction; const

我想我将从我的网页配置开始

const webpack = require('webpack');
const path = require('path');

/**
 * Environment
 */
const nodeEnv = process.env.NODE_ENV || 'development';
const isProduction = nodeEnv === 'production';
const isDevelopment = !isProduction;

const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const sourcePath = path.join(__dirname, 'assets');
const buildPath = path.join(__dirname, 'dist');

const extractSass = new ExtractTextPlugin({
  filename: '[name].[contenthash].css',
  disable: isDevelopment
});

/**
 * Plugins
 */
const plugins = [
  new HtmlWebpackPlugin({
    template: path.join(sourcePath, 'index.html'),
  }),
  extractSass
];

if (isProduction) {
} else {
  plugins.concat([
    new webpack.HotModuleReplacementPlugin(),
  ]);
}

module.exports = {
  entry: ['./assets/app.js', './assets/app.scss'],
  devtool: isProduction ? 'eval' : 'source-map',
  plugins: plugins,
  module: {
    rules: [{
      test: /\.scss$/,
      use: extractSass.extract({
        use: [{
          loader: "css-loader"
        }, {
          loader: "sass-loader"
        }],
        // use style-loader in development
        fallback: "style-loader"
      })
    }]
  },
  output: {
    filename: 'bundle.js',
    path: buildPath
  },
  devServer: {
    contentBase: buildPath,
    port: 9000
  }
};
在webpack dev服务器上运行时,这一切都可以正常工作,但我正试图弄清楚这在生产环境中是如何结合在一起的

如您所见,根据sass加载程序文档,我正在创建一个名为
[name].[contenthash].css的文件,如果
NODE\u ENV
设置为
production
。我喜欢基于内容散列提供文件的想法,因为我喜欢完整性

我遇到的困难是理解如何将文件名、内容散列传递到我正在创建的index.html模板中,以便
样式表

  • 这是服务器端的事情吗
  • 有没有办法将该文件名传递到上的HTML模板中 生产
  • 我是故意手动操作还是编写脚本

我只是不明白这两个组件是如何结合在一起生成一个可发布的构建的
HtmlWebpackPlugin
在输出目录中生成了一个.html,但显然它对在哪里可以找到它的样式没有天生的理解。

您的配置似乎是正确的

有没有办法在生产时将该文件名传递到HTML模板中

应该发生的是
HtmlWebpackPlugin
应该在
buildPath
目录中创建一个新的
index.html
文件,其中自动注入生成的包(例如,生成的CSS包将被注入
head
标记中,而生成的脚本包将被注入
body
标记底部)

除此之外,只需将
dist/index.html
提供给任何访问您的站点/应用程序的人

这是服务器端的事情吗

是的


尝试在没有开发服务器的情况下进行构建,只需运行
webpack
,这样您就可以看到配置的输出(开发服务器在内存中构建内容,因此您实际上无法看到它们)

我将不得不就此与您联系。抱歉,等待。