全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

关于webpack2和模块打包的新手指南(小结)

webpack已成为现代Web开发中最重要的工具之一。它是一个用于JavaScript的模块打包工具,但是它也可以转换所有的前端资源,例如HTML和CSS,甚至是图片。它可以让你更好地控制应用程序所产生的HTTP请求数量、允许你使用其他资源的特性(例如Jade、Sass和ES6)。webpack还可以让你轻松地从npm下载包。

本文主要针对那些刚接触webpack的同学,将介绍初始设置和配置、模块、加载器、插件、代码分割和热模块替换。

在继续学习下面的内容之前需要确保你的电脑中已经安装了Node.js。

初始配置

使用npm初始化一个新项目并安装webpack:

mkdir webpack-demo
cd webpack-demo
npm init -y
npm install webpack@beta --save-dev
mkdir src
touch index.html src/app.js webpack.config.js

编写下面这些文件:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <title>Hello webpack</title>
 </head>
 <body>
  <div id="root"></div>
  <script src="dist/bundle.js"></script>
 </body>
</html>
// src/app.js
const root = document.querySelector('#root')
root.innerHTML = `<p>Hello webpack.</p>`
// webpack.config.js
const webpack = require('webpack')
const path = require('path')

const config = {
 context: path.resolve(__dirname, 'src'),
 entry: './app.js',
 output: {
  path: path.resolve(__dirname, 'dist'),
  filename: 'bundle.js'
 },
 module: {
  rules: [{
   test: /\.js$/,
   include: path.resolve(__dirname, 'src'),
   use: [{
    loader: 'babel-loader',
    options: {
     presets: [
      ['es2015', { modules: false }]
     ]
    }
   }]
  }]
 }
}

module.exports = config

上面的配置是一个普通的出发点,它通知webpack将入口文件src/app.js编译输出到文件/dist/bundle.js中、使用babel将所有的.js文件从ES2015转换成ES5。

为了让它可以转换到ES5格式的JS文件,我们需要安装三个包:babel-core、webpack加载器babel-loader和预置babel-preset-es2015。使用{ modules: false }让Tree Shaking 从打包文件中删除未使用的导出项(exports)以减少文件大小。

npm install babel-core babel-loader babel-preset-es2015 --save-dev

最后,用以下内容替换package.json的scripts部分:

"scripts": {
 "start": "webpack --watch",
 "build": "webpack -p"
},

在命令行中运行npm start将以监视模式启动webpack,当src目录中的.js文件更改时,它将重新编译bundle.js。控制台中的输出展示了打包文件的信息,注意打包文件的数量和大小十分重要。

现在当你在浏览器中加载index.html页面时会看到"Hello webpack."。

open index.html

打开dist/bundle.js文件看看webpack都做了哪些事情,顶部是webpack的模块引导代码,底部是我们的模块。到目前为止,你可能对于这个还没有一个深刻的印象。但是现在你可以开始编写ES6模块,webpack将生成适用于所有浏览器的打包文件。

使用Ctrl + C停止webpack,运行npm run build以生产模式编译我们的bundle.js

注意,打包文件的大小从2.61 kB减少到了585字节。再看一下dist/bundle.js文件,你会看到大量难懂的代码,因为我们使用UglifyJS压缩了它。这样的话,我们可以使用更少的代码达到与之前一样的效果。

模块

优秀的webpack知道如何使用各种格式的JavaScript模块,最著名的两个是:

  • ES2015 import语句
  • CommonJS require()语句

我们可以通过安装、导入lodash来测试这些格式的模块。

npm install lodash --save
// src/app.js
import {groupBy} from 'lodash/collection'

const people = [{
 manager: 'Jen',
 name: 'Bob'
}, {
 manager: 'Jen',
 name: 'Sue'
}, {
 manager: 'Bob',
 name: 'Shirley'
}, {
 manager: 'Bob',
 name: 'Terrence'
}]
const managerGroups = groupBy(people, 'manager')

const root = document.querySelector('#root')
root.innerHTML = `<pre>${JSON.stringify(managerGroups, null, 2)}</pre>`

运行npm start启动webpack并刷新index.html,你可以看到一个根据manager分组的数组。

让我们将这个数组转移到它自己的模块people.js中。

// src/people.js
const people = [{
 manager: 'Jen',
 name: 'Bob'
}, {
 manager: 'Jen',
 name: 'Sue'
}, {
 manager: 'Bob',
 name: 'Shirley'
}, {
 manager: 'Bob',
 name: 'Terrence'
}]

export default people

我们可以在app.js中使用相对路径轻松的导入它。

// src/app.js
import {groupBy} from 'lodash/collection'
import people from './people'

const managerGroups = groupBy(people, 'manager')

const root = document.querySelector('#root')
root.innerHTML = `<pre>${JSON.stringify(managerGroups, null, 2)}</pre>`

注意:像lodash/collection这样没有相对路径的导入是导入安装在/node_modules的模块,你自己的模块需要一个类似./people的相对路径,你可以以此区分它们。

加载器

我们已经介绍过,你可以通过配置像babel-loader这样的加载器来告诉webpack在遇到不同文件类型的导入时该怎么做。你可以将多个加载器组合在一起,应用到很多文件转换中。在JS中导入.sass文件是一个非常的例子。

Sass

这种转换涉及三个单独的加载器和node-sass库:

npm install css-loader style-loader sass-loader node-sass --save-dev

在配置文件中为.scss文件添加新规则。

// webpack.config.js
rules: [{
 test: /\.scss$/,
 use: [
  'style-loader',
  'css-loader',
  'sass-loader'
 ]
}, {
 // ...
}]

注意: 任何时候更改webpack.config.js中的任意一个加载规则都需要使用Ctrl + Cnpm start重新启动构建。

加载器序列以相反的顺序进行处理:

  • sass-loader 将Sass转换为CSS。
  • css-loader 将CSS解析为JavaScript并解析所有依赖。
  • style-loader将我们的CSS输出到文档中的

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


# webpack  # 模块打包  # 模块化打包  # 按模块打包  # webpack独立打包和缓存处理详解  # Webpack打包慢问题的完美解决方法  # 彻底解决 webpack 打包文件体积过大问题  # 详解webpack+vue-cli项目打包技巧  # 详解如何用webpack打包一个网站应用项目  # Vue项目webpack打包部署到服务器的实例详解  # Webpack 服务器端代码打包的示例代码  # 加载  # 你可以  # 自己的  # 让你  # 我们可以  # 是一个  # 还没  # 还可以  # 让我们  # 多个  # 你会  # 最重要  # 你在  # 适用于  # 它是  # 你可  # 它可以  # 可以使用  # 怎么做  # 将以 


相关文章: 建站之星安装失败:服务器环境不兼容?  北京制作网站的公司,北京铁路集团官方网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  浅析上传头像示例及其注意事项  如何在局域网内绑定自建网站域名?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  如何快速选择适合个人网站的云服务器配置?  大连网站设计制作招聘信息,大连投诉网站有哪些?  Thinkphp 中 distinct 的用法解析  如何用免费手机建站系统零基础打造专业网站?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  临沂网站制作企业,临沂第三中学官方网站?  如何选择适合PHP云建站的开源框架?  在线制作视频网站免费,都有哪些好的动漫网站?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  深圳网站制作平台,深圳市做网站好的公司有哪些?  ,有什么在线背英语单词效率比较高的网站?  如何通过VPS建站无需域名直接访问?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  建站之星ASP如何实现CMS高效搭建与安全管理?  建站主机类型有哪些?如何正确选型  如何通过商城自助建站源码实现零基础高效建站?  模具网站制作流程,如何找模具客户?  如何通过山东自助建站平台快速注册域名?  高端网站建设与定制开发一站式解决方案 中企动力  如何自定义建站之星网站的导航菜单样式?  如何在云主机快速搭建网站站点?  深入理解Android中的xmlns:tools属性  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站与域名管理如何高效结合?  大同网页,大同瑞慈医院官网?  Android使用GridView实现日历的简单功能  昆明高端网站制作公司,昆明公租房申请网上登录入口?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何在IIS中新建站点并配置端口与IP地址?  如何在香港免费服务器上快速搭建网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  如何高效配置IIS服务器搭建网站?  如何选购建站域名与空间?自助平台全解析  制作网站公司那家好,网络公司是做什么的?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  广东专业制作网站有哪些,广东省能源集团有限公司官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。