vue-material/build/webpack/prod-lib.js

129 lines
3.1 KiB
JavaScript

import fs from 'fs';
import path from 'path';
import webpack from 'webpack';
import merge from 'webpack-merge';
import autoprefixer from 'autoprefixer';
import ExtractTextPlugin from 'extract-text-webpack-plugin';
import OptimizeJsPlugin from 'optimize-js-plugin';
import OptimizeCssAssetsPlugin from 'optimize-css-assets-webpack-plugin';
import mediaPacker from 'css-mqpacker';
import config from '../config';
import baseConfig from './base';
const version = process.env.VERSION || require('../../package.json').version;
function getDirectories(src) {
return fs.readdirSync(src).filter((file) => {
return fs.statSync(path.join(src, file)).isDirectory();
});
}
const componentsPath = 'src/components';
const components = getDirectories(path.resolve(__dirname, '../../', componentsPath));
baseConfig.entry = {
'vue-material': ['./src/index.js'],
'components/mdCore/index': ['./src/core']
};
components.forEach((component) => {
baseConfig.entry[path.join('components', component, 'index')] = ['./' + path.join(componentsPath, component)];
});
export default merge(baseConfig, {
output: {
path: config.rootPath,
filename: '[name].js',
library: 'VueMaterial',
libraryTarget: 'umd'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
css: ExtractTextPlugin.extract({
use: 'css-loader',
fallback: 'vue-style-loader'
}),
scss: ExtractTextPlugin.extract({
use: 'css-loader!sass-loader',
fallback: 'vue-style-loader'
})
},
postcss: [
autoprefixer({
browsers: ['last 3 versions', 'not IE < 10']
}),
mediaPacker()
]
}
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({
use: 'css-loader',
fallback: 'vue-style-loader'
})
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract({
use: 'css-loader!sass-loader',
fallback: 'vue-style-loader'
})
}
]
},
externals: {
vue: {
commonjs: 'vue',
commonjs2: 'vue',
amd: 'vue',
root: 'Vue',
var: 'Vue'
}
},
plugins: [
new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
screw_ie8: true,
conditionals: true,
unused: true,
comparisons: true,
sequences: true,
dead_code: true,
evaluate: true,
join_vars: true,
if_return: true
},
output: {
comments: false
},
sourceMap: false
}),
new OptimizeJsPlugin({
sourceMap: false
}),
new webpack.BannerPlugin({
banner: `/*!
* Vue Material v${version}
* Made with love by Marcos Moura
* Released under the MIT License.
*/ `,
raw: true,
entryOnly: true
}),
new ExtractTextPlugin('[name].css'),
new OptimizeCssAssetsPlugin({
canPrint: false
})
]
});