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"
}
}

Vue和Webpack是两个不同的技术,但它们可以一起使用来构建和打包Vue.js应用程序。在Vue中,Webpack是一个用于构建和打包前端资源的强大工具。Webpack打包过程包括加载器(loader)和插件(plugin)的使用。 加载器(loader)主要用于处理非JavaScript资源,例如CSS、图片等。它们允许您将这些资源转换为模块,并将其包含在最终的打包文件中。加载器通常在Webpack配置文件中配置,并按照一定的规则(正则表达式)来处理相应的文件。 插件(plugin)则是对Webpack的功能的扩展,比如打包优化、文件压缩等。插件可以在Webpack配置文件中引入,并在构建过程中被调用。您可以根据自己的需求选择不同的插件来完成各种任务。 例如,您可以在Webpack配置文件中使用UglifyjsWebpackPlugin插件来进行代码压缩,以减小最终打包文件的大小。在另一个示例中,您可以使用webpack.ContextReplacementPlugin插件来配置打包上下文,以只打包指定的文件。 综上所述,Vue和Webpack打包过程中使用加载器和插件来处理和优化前端资源。这些工具的灵活性使您能够根据自己的需求来定制和优化应用程序的打包过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue基础知识总结 9:vue webpack打包原理](https://blog.youkuaiyun.com/guorui_java/article/details/120584919)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vue webpack 打包优化方法](https://blog.youkuaiyun.com/weixin_46653486/article/details/130380612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值