极乐门资源网 Design By www.ioogu.com

"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 使用起来感觉非常新颖,也容易入手!今天总结的多是入门的内容,后续还要继续使用~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

标签:
webpack,异步加载,webpack,异步加载css,webpack,多个入口文件

极乐门资源网 Design By www.ioogu.com
极乐门资源网 免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com

评论“详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)”

暂无详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)的评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?