我想我会用我的WebPack配置开始。内容散列,ExtractTextPlugin和HtmlWebpackPlugin
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开发服务器上运行时,这一切都正常,但我试图弄清楚这是如何适应生产环境。
正如你所看到的,因为每SASS装载机的文档,我创建一个如果NODE_ENV
设置为production
称为[name].[contenthash].css
文件。我喜欢基于内容哈希来提供文件的想法,因为我喜欢诚信。
我遇到的困难是了解如何通过该文件名,将该内容散列到我创建的index.html模板中,以便我可以将<link>
样式表。
- 它是一个服务器端的事情吗?
- 有什么方法来传递文件名到HTML模板上 生产?
- 是不是故意的,我做手工或脚本吧?
我只是不明白这两个组件是如何聚集在一起产生可发布构建。 HtmlWebpackPlugin
在输出目录中产生了一个.html文件,但显然它没有天生的理解在哪里找到它的样式。
我这将不得不回到你身边。抱歉,久等了。 –