【发布时间】:2017-08-13 19:52:25
【问题描述】:
我想我将从我的 webpack 配置开始。
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-loader 文档,如果 NODE_ENV 设置为 production,我将创建一个名为 [name].[contenthash].css 的文件。我喜欢基于内容哈希提供文件的想法,因为我喜欢完整性。
我遇到的困难是了解如何将文件名、内容哈希传递到我正在创建的 index.html 模板中,以便<link> 样式表。
- 这是服务器端的事情吗?
- 有没有办法将该文件名传递到 HTML 模板中 生产?
- 我是有意手动执行还是编写脚本?
我只是不明白这两个组件如何结合在一起生成可发布的构建。 HtmlWebpackPlugin 在输出目录中生成了一个 .html,但显然它不知道在哪里可以找到它的样式。
【问题讨论】:
标签: javascript sass webpack frontend webpack-2