react-redux-boilerplate-scripts
Version:
react-boilerplate-app-scripts
116 lines (111 loc) • 3.29 kB
JavaScript
const webpack = require('webpack');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const path = require('path');
const fs = require('fs-extra');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const util = require('react-boilerplate-app-utils');
const paths = require(util.pathResolve('config/paths.js',__dirname,'react-redux-app-scripts'));
//bebin-----------packageJson信息获取
const packageJson = util.getCwdPackageJson();
function getInfo(package){
return !!(
packageJson.dependencies && packageJson.dependencies[package]
|| packageJson.devDependencies && packageJson.devDependencies[package]
);
}
const useSass = getInfo("sass-loader") && getInfo("node-sass");
const useImmutable = getInfo("immutable") && getInfo("redux-immutable");
//end -----------packageJson信息获取
const entry = [
'react-hot-loader/patch',
'webpack-dev-server/client',//热替换入口文件
// bundle the client for hot reloading
// only- means to only hot reload for successful updates
'webpack/hot/only-dev-server',
paths.appEntry,
];
//webpack配置项
var config = {
devtool: "cheap-module-source-map",
//隐藏终端的warning信息
performance: {
hints: false,
},
entry: {
app: entry,
},
output: {
filename: 'bundle.js?hash=[hash]',
//js打包输出目录,以package.json为准,是用相对路径
path: paths.appBuild,
//内存和打包静态文件输出目录,以index.html为准,使用绝对路径,最好以斜杠/结尾,要不有意想不到的bug
publicPath: '/',
//定义require.ensure文件名
chunkFilename: '[name]-[id]-[chunkHash].chunk.js',
libraryTarget: "var",
sourceMapFilename: "[file].map"
},
module: {
rules: [
//匹配到rquire中以.css结尾的文件则直接使用指定loader
{
test: /\.css$/,
use: ["style-loader","css-loader"]
},
//limit是base64转换最大限制,小于设置值,都会转为base64格式
//name是在css中提取图片的命名方式
{
exclude: [
/\.html$/,
/\.(js|jsx)$/,
/\.css$/,
/\.json$/
],
//[path]是以publicPath为准
loader: 'url-loader',
options: { limit: 10000,
name: "/static/media/[name].[hash].[ext]"
}
},
{
//匹配.js或.jsx后缀名的文件
test: /\.js[x]?$/,
loader: 'babel-loader',
include: paths.src
},
],
},
externals: {
},
resolve: {
alias: {
"src": paths.src,
},
//不可留空字符串
extensions: ['.js', '.jsx']
},
plugins: [
new webpack.NoEmitOnErrorsPlugin(),
new HtmlWebpackPlugin({
PREFIX_URL: "test",
inject: true,
template: paths.appHtml,
}),
new webpack.DefinePlugin({
'PREFIX_URL': JSON.stringify(""),
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
'process.env.useImmutable': JSON.stringify(useImmutable),
}),
new webpack.HotModuleReplacementPlugin()
],
};
//使用sass配置
if(useSass) {
config.module.rules.push(
{
test: /\.scss$/,
loader: ["style-loader","css-loader","sass-loader"]
}
);
}
module.exports = config;