"color: #ff0000">为什么是webpack
1.webpack一下自己就"color: #ff0000">webpack实战
webpack.config.js 一般写法
开头声明对路径相关的变量,以及引入依赖,包括webpack(非必须),以及需要的插件
然后,entry 声明入口相关的如文件名,路径等,output 声明生成文件相关的路径和文件名,module 中是针对不同文件进行处理的 loader 声明,plugins 声明了插件的具体使用。
压缩代码
这里使用webpack的内置的插件,我们写在webpack.config.js 中的plugins 部分
new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } })
提取公共类库
这部分我没有用到,但也是基于webpack 内置的插件,目的是将用到的jquery 等第三方库整合到一个文件,否则都合并到一个文件,会造成这个文件特别大
首先在entry 声明第三方库
entry: { app: path.resolve(APP_PATH, 'index.js'), //添加要打包在vendeors里面的库 vendors: ['jquery', 'moment'] }, plugins: { //把入口文件里面的数组打包成vendors.js new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js'), }
css 单独打包
有的时候需要将css 单独打包,作为CDN,或者我这里的情况是是,页面引入了很多的css js 文件,而我的js 在最后加载!所以如果是js 中引入的css ,那么会导致页面在开始的时候没有样式,知道解析到我的js !所以这里将css 单独打包,单独在页面引入!
首先需要安装插件
npm install extract-text-webpack-plugin –save-dev
然后在webpack.config.js 中声明插件
// 引入css 单独打包插件 var ExtractTextPlugin = require("extract-text-webpack-plugin"); // 设置生成css 的路径和文件名,会自动将对应entry入口js文件中引入的CSS抽出成单独的文件 var packCSS = new ExtractTextPlugin('./css/[name].min.css');
在plugins 中引入并使用
plugins: [ packCSS ]
我们需要首先在js 中引用相应的css文件
require('./css/plan.css');
然后这个插件会自动将js中的css文件提取出来,生成单独的文件
样式的处理
安装 css-loader style-loader
npm install css-loader style-loader --save-dev
css-loader会遍历css文件,找到所有的url(...)并且处理。style-loader会把所有的样式插入到你页面的一个style
module: { loaders: [ { test: /\.css$/, loaders: ['style', 'css'], include: APP_PATH } ] }
图片的处理
安装 url-loader
npm install url-loader --save-dev
webpack.config.js
{ test: /\.(png|jpg)$/, loader: 'url"htmlcode">entry: { creative: './src/static/js/apps/idea.js', plan: './src/static/js/apps/plan.js', }, output: { path: 'dist/', filename: 'js/[name].min.js' }更新
代码切分以及异步加载
今天遇到的问题是,我做的一个页面是要分为四个步骤,每个步骤在进入下一步的时候需要对下一步的内容进行接口请求,页面渲染和事件绑定等操作。
之前的做法
拆分了各个步骤对应模块之后,我通过commonJS的方式在入口文件开头引入了各个模块
这时候是这样的
var stepOne = require('./mods/stepone.js'); var steptwo = require('./mods/steptwo.js'); ... // 使用的时候 stepone.checkOne();这种做法,因为commonJS 的同步加载机制,会导致入口文件打包之后非常臃肿。在首屏,用到用不到处理代码的都会在一开始就加载,严重影响了首屏加载时间。
代码切分之后
我利用webpack的code splitting 特性,将各个步骤的代码进行拆分,实现按需加载。这里主要利用了 webpack 的 require.ensure 函数实现的。非常方便,只需要把异步加载的代码,放到 require.ensure 里面的回调函数就可以实现:
require.ensure(['./mods/stepone.js'], function(){ var stepone = require('./mods/stepone.js'); stepone.checkone(); }, 'stepone'); // 第三个参数设置打包名称这样设置,webpack 就会单独生成拆分的文件,我们还需要设置拆分文件的名字和路径。这里我费了一番周折。
webpack 默认给拆分的文件用数字命名,如果我们自己不进行设置,会得到 1.min.js 这样类似的文件。我们可以在 webpack.config.js 中,通过 output.chunkFilename 来设置分块生成文件的名称,分块的路径可以通过 output.publicPath 设置。这里一定要设置 publicPath,不然得到的路径有可能不是我们上线打包的路径。具体我的设置如下:
output: { path: path.join(__dirname, 'dist'), filename: 'js/apps/[name].min.js', publicPath: '/dist/', // 设置require.ensure路径 chunkFilename: 'js/apps/[name].min.js' // 设置require.ensure 文件名 }总结
webpack 使用起来感觉非常新颖,也容易入手!今天总结的多是入门的内容,后续还要继续使用~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】