webpack简单打包PC网站前端资源

 :arrow: 
1. 纯前端的打包输出,比较有局限
2.目录结构
|--build
|--app
|--base //基础核心文件,譬如jQuery,公共Util等
|--css
|--images

|--plugins //jQuery插件
|--jquery.lazyload.js

|--page //功能页面模块,每个模块至少包含一个和文件夹同名的js,作为打包入口
|--common
|--orderCommon.js
|--xxx.js
|--orderDetail
|--orderDetail.js
|--orderList
|--orderList.js
|--search
|--search.js
|--searchHelper.js
|--abc
|--abc.js
|--vendor.js // 全站公用文件





//vendor.js

import $ from 'jQuery';
import "plugins/jquery.lazyload";

import Util from "app/base/Util";

require('app/css/page/global.css');

//orderDetail.js
import Util from "app/base/Util";

var orderCommon = null;
var orderDetail = {
init: function(){
//
}
};

//异步加载,确保orderCommon将被分割为单独文件加载
require.ensure(['app/page/common/orderCommon'],function(orderCommon){
orderCommon = orderCommon;
orderDetail.init();
});




//webpack.config.js


var webpackDevHost = 'localhost'

var path = require('path'),
webpack = require('webpack'),
ExtractTextPlugin = require('extract-text-webpack-plugin'),
Clean = require('clean-webpack-plugin'),
HtmlWebpackPlugin = require('html-webpack-plugin');

var glob = require('glob');
var AssetsPlugin = require('assets-webpack-plugin');

const BUILD_DIRECTORY = 'build';
const BUILD_DROP_PATH = path.resolve(__dirname, BUILD_DIRECTORY);

var ENV_PRO = false;

var entry = (function getEntry(){
var entry = {};
var result = glob.sync(path.join('./app/page', '**/*.js'));

//获取page下目录,符合 page/xxx/xxx.js 的,将被视为entry入口。
result.forEach( function(name) {
var folder = name.split('/')[2],
filename = name.split('/')[3];
if(folder !== 'common' && folder + '.js' === filename){
entry[name.split('/').pop().split('.').shift()] = name;
}
});

//额外的附加入口
entry.vendor = './app/page/vendor.js';
entry.jqueryui = './app/page/jqueryui.js';

// console.log(JSON.stringify(entry));
return entry;
})();


module.exports = {
// devtool: 'eval',

// 'webpack-dev-server/client?http://' + webpackDevHost + ':' + webpackDevPort,
// 'webpack/hot/only-dev-server',
entry: entry,
output: {
path: path.join(__dirname, './build2'),
filename: ENV_PRO ? '[name].[chunkhash].js': '[name].js',
chunkFilename: ENV_PRO ? "[id].[chunkhash].js" : '[id].js',
pathinfo: ENV_PRO ? true : false,
publicPath: 'http://192.168.91.250:1234/build2/'
},
plugins: [

// new webpack.HotModuleReplacementPlugin(),
// new webpack.NoErrorsPlugin()


new Clean(['build2'])
// ,new webpack.ProvidePlugin({
// $: "jquery",
// jQuery: "jquery",
// "window.jQuery": "jquery"
// })

,new ExtractTextPlugin( ENV_PRO ? "[name].[hash].css" : '[name].css')


// ,new webpack.optimize.CommonsChunkPlugin({
// name: "c-commons",
// chunks: ["orderDetail", "orderList"]
// })


,new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
filename: ENV_PRO ? 'vendor.[chunkhash].js' : 'vendor.js'
,minChunks: Infinity
})

,new AssetsPlugin({
filename: 'webpack.assets.json',
path: path.join(__dirname, './build2'),
prettyPrint: true
})

// ,new uglifyJsPlugin({
// compress: {
// warnings: false
// }
// })
],
resolve: {
alias: {
app: path.join(__dirname, '/app'),
base: path.join(__dirname, '/app/base'),
page: path.join(__dirname, '/app/page'),
plugins: path.join(__dirname, '/app/plugins'),
jquery: path.join(__dirname, '/app/base/jquery.pack.js'),
jQuery: path.join(__dirname, '/app/base/jquery.pack.js'),
$: path.join(__dirname, '/app/base/jquery.pack.js')
},
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [{
test: /jquery.pack.js/,
loader: 'expose?$!expose?jQuery!'
},{ test: /plugins\/jquery\..+\.js$/,
loader: 'imports?jQuery=jquery,$=jquery,this=>window'
},{
test: /\.(js|jsx)$/,
exclude: /(node_modules)/,
loader: 'babel?presets[]=es2015,presets[]=stage-3'
},{
test: /\.scss$/,
loader: ExtractTextPlugin.extract("style-loader",'css-loader!sass-loader')
}, {
test: /\.css$/,
loader: ExtractTextPlugin.extract("style-loader",'css-loader')
},{
test: /\.(jpe?g|png|gif)$/,
loader: 'url?limit=8192&name=images/[hash].[ext]'
}, {
test: /\.(woff|woff2|eot|ttf|svg)$/,
loader: 'url?limit=8192'
}, {
test: /\.html/,
loader: 'raw'
}, {
test: /\.json/,
loader: 'json'
}]
}
}




package.json

{
"name": "site_pc",
"repository": "",
"version": "1.1.0",
"main": "webpack.config.js",
"scripts": {},
"license": "ISC",
"devDependencies": {
"assets-webpack-plugin": "^3.3.0",
"babel-core": "^6.1.21",
"babel-loader": "^6.1.0",
"babel-polyfill": "^6.3.14",
"babel-preset-es2015": "^6.1.4",
"babel-preset-stage-3": "^6.1.2",
"clean-webpack-plugin": "^0.1.4",
"css-loader": "^0.23.0",
"es6-promise": "^3.0.2",
"expose-loader": "^0.7.1",
"imports-loader": "^0.6.5",
"extract-text-webpack-plugin": "^0.9.1",
"html-loader": "^0.3.0",
"html-webpack-plugin": "^1.6.2",
"imports-loader": "^0.6.5",
"json-loader": "^0.5.3",
"nib": "^1.1.0",
"node-sass": "^3.4.2",
"raw-loader": "^0.5.1",
"sass-loader": "^3.1.2",
"style-loader": "^0.13.0",
"url-loader": "^0.5.6",
"webpack": "^1.12.4",
"webpack-dev-server": "^1.12.1",
"webpack-manifest-plugin": "^1.0.0"
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值