build: refactor webpack configs

This commit is contained in:
Micooz 2017-07-27 17:37:18 +08:00
parent f04b87fb62
commit e800d3e83d
4 changed files with 207 additions and 91 deletions

1
src/index.js Normal file
View File

@ -0,0 +1 @@
window.DPlayer = require('./DPlayer');

View File

@ -1,91 +0,0 @@
var webpack = require('webpack');
var path = require('path');
var autoprefixer = require('autoprefixer');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var libraryName = 'DPlayer';
var env = process.env.WEBPACK_ENV;
var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, 'src');
var BUILD_PATH = path.resolve(ROOT_PATH, 'dist');
var dev = env === 'dev';
var plugins = [].concat(dev ? [] : [
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
compressor: {
warnings: false,
conditionals: true,
unused: true,
comparisons: true,
sequences: true,
dead_code: true,
evaluate: true,
if_return: true,
join_vars: true,
negate_iife: false
},
output: {
comments: false
}
}),
new ExtractTextPlugin(`${libraryName}.min.css`)
]);
module.exports = {
entry: './src/' + libraryName + '.js',
output: {
path: BUILD_PATH,
filename: libraryName + '.min.js',
library: libraryName,
libraryTarget: 'umd',
umdNamedDefine: true
},
devtool: dev ? 'eval-source-map' : 'source-map',
devServer: {
publicPath: "/dist/",
},
module: {
rules: [
{
enforce: 'pre',
test: /\.js$/,
loader: 'eslint-loader',
include: APP_PATH,
options: {
configFile: './.eslintrc'
},
},
{
test: /\.js$/,
loader: 'template-string-optimize-loader',
include: APP_PATH,
},
{
test: /\.js$/,
loader: 'babel-loader',
include: APP_PATH,
options: {
presets: ['es2015']
}
},
{
test: /\.scss$/,
use: dev ? ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader'] : ExtractTextPlugin.extract({
use: ['css-loader?minimize&-autoprefixer', 'postcss-loader', 'sass-loader']
}),
include: APP_PATH
},
{
test: /\.(png|jpg)$/,
loader: 'url-loader?limit=40000'
}
]
},
plugins: plugins
};

102
webpack/dev.config.js Normal file
View File

@ -0,0 +1,102 @@
const path = require('path');
const webpack = require('webpack');
module.exports = {
devtool: 'cheap-module-source-map',
entry: {
'DPlayer': './src/index.js'
},
output: {
path: path.resolve(__dirname, '..', 'dist'),
filename: '[name].js',
publicPath: '/'
},
resolve: {
modules: ['node_modules'],
extensions: ['.js', '.scss']
},
module: {
strictExportPresence: true,
rules: [
{
test: /\.js$/,
enforce: 'pre',
loader: require.resolve('eslint-loader'),
include: path.resolve(__dirname, '../src'),
},
{
test: /\.js$/,
use: [
{
loader: require.resolve('babel-loader'),
options: {
cacheDirectory: true,
presets: ['env']
}
}
]
},
{
test: /\.scss$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1
}
},
{
loader: require.resolve('postcss-loader'),
options: {
ident: 'postcss'
}
},
require.resolve('sass-loader')
]
},
{
test: /\.(png|jpg)$/,
loader: require.resolve('url-loader'),
options: {
'limit': 40000
}
}
]
},
devServer: {
compress: true,
contentBase: path.resolve(__dirname, '..', 'demo'),
clientLogLevel: 'none',
quiet: false,
open: true,
historyApiFallback: {
disableDotRule: true
},
watchOptions: {
ignored: /node_modules/
}
},
plugins: [
new webpack.NamedModulesPlugin()
],
node: {
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty'
},
performance: {
hints: false
}
};

104
webpack/prod.config.js Normal file
View File

@ -0,0 +1,104 @@
const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
bail: true,
devtool: 'source-map',
entry: {
'DPlayer': './src/index.js'
},
output: {
path: path.resolve(__dirname, '..', 'dist'),
filename: '[name].min.js',
publicPath: '/'
},
resolve: {
modules: ['node_modules'],
extensions: ['.js', '.scss']
},
module: {
strictExportPresence: true,
rules: [
{
test: /\.js$/,
enforce: 'pre',
loader: require.resolve('eslint-loader'),
include: path.resolve(__dirname, '../src'),
},
{
test: /\.js$/,
use: [
require.resolve('template-string-optimize-loader'),
{
loader: require.resolve('babel-loader'),
options: {
compact: true,
presets: ['env']
}
}
]
},
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: require.resolve('style-loader'),
use: [
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
minimize: true,
sourceMap: true
}
},
{
loader: require.resolve('postcss-loader'),
options: {
ident: 'postcss'
}
},
require.resolve('sass-loader')
]
})
},
{
test: /\.(png|jpg)$/,
loader: require.resolve('url-loader'),
options: {
'limit': 40000
}
}
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
output: {
comments: false,
ascii_only: true
},
sourceMap: true
}),
new ExtractTextPlugin({
filename: '[name].min.css'
})
],
node: {
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
}
};