webpack入门

webpack在逐渐成为一个成熟的青年路上,一直备受大家青睐,
然而还在不断的健身,希望以最好的姿态呈现给各位,如今他已经v3。
比起1 、2又强化骨骼,变得更坚实。    

一、什么是webpack

官方给出:Webpack 是前端资源模块化管理和打包工具
他可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源
还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。个人理解:首先,webpack其实就是前端工程的模块化打包工具
他可以把复杂的程序细化为细小的文件,然后在让各个模块进行加载
其次,天生支持commenjs,因为他就是在nodejs下开发的,但也支持AMD/CMD,方便旧代码的迁移
然后,他可以使得前端开发便捷,可以代替gulp/grunt(接下来会写到),
比如打包压缩、启动server模块热替换、编译sass less 以及css的抽离、
mock数据、版本控制、devtool源码映射、以及开发、生产环境的切换
最后,webpack的扩展性强,插件机制完善,有效提高开发效率。

二、核心概念

  • 入口 Entry
    页面中的入口文件,entry的值有三种类型:字符串、数组、对象

       1、字符串entry: './app.js'2、数组当存在多chrunks时,可以采用数组的形式,比如第三方库bootstrap{entry: ['./src/index.js', './vendors/bootstrap.js'],output: {path: './dist',filename: "index.js"}}会被打包到index.js中,但是数组的最后一个元素会被export3、对象设置多个打包的文件{   entry: {   index: './src/index.js',  header: './src/header.js'   } }  
  • 出口 Output

      指生成的文件要输出的目录, path、 filenameoutput : {filename: '[name].js',path :__dirname + '/dev/scripts' //必须是绝对路径 __dirname 指的是当前config.js路径}如果加版本号的话filename : '[name]@[chunk:6hash].js'注:版本号的配置有两种方法,我会单独写一篇文章来介绍。。。
  • 加载器 Loader
    webpack本身只理解JavaScript,sass、css、html、jpg等文件需要loader进行处理,转换为模块
    常用的有:
    babel-loader

       用来编译es6+ 1、下载:npm i babel-core babel-loader babel-preset-env -D注意以前用的是:npm i babel-core babel-loader babel-preset-es2015 babel-preset-state-02、需要在项目根目录创建.babelrc用来预设es6{"presets" : ["babel-preset-env"]}eg:3、{test: /\.js$/,exclude : /node_modules/,排除不必要的js解析use : [{loader : 'babel-loader',//解析es6解析具体通过babel-core}]},

    sass-loader、css-loader、style-loader
    下载:npm i css-loader style-loader -D //css loader

        npm i sass-loader node-sass -D  //编译成csseg:// 加载css{test: /\.css$/,use: [{ loader: 'style-loader' },{ loader: 'css-loader' },//执行的时候从下往上执行{loader : 'sass-loader'}]}sass-loader是编译 sass文件为css文件,css-loader是编译css文件为字符串,最后 style-loader把css字符串打入html文件的style标签里,让页面能加载样式。

    url-loader
    下载:npm i url-loader -D

       图片、字体图标加载器,是对file-loader的上层封装,支持base64编码。传入的size(也有的写limit) 参数是告诉它图片如果不大于 25KB 的话要自动在它从属的 css 文件中转成 BASE64 字符串。
    file-loader:
    下载:npm i file-loader -D 加载一些 媒体文件 字体图标等// 加载图片{test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,loader: 'url-loader',options: {limit: 1000,name: 'media/images/[name].[hash:7].[ext]'}},// 加载媒体文件{test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000,name: 'media/mp4/[name].[hash:7].[ext]'}},// 加载iconfont{test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000,name: 'media/iconfont/[name].[hash:7].[ext]'}}

    vue-loader

     下载:npm i vue-loader -D    加载vue组件

    postcss-loader

       css3加浏览器前缀
  • 插件 Plugins

       插件可以帮助webpack进行输出文文件

    常用的插件有:
    (1) html-webpack-plugin 它会在src目录下自动生成一个index.html

       配置webpack.config.js中 var HtmlWebpackPlugin = require('html-webpack-plugin')在plugins : {//编译htmlnew HtmlWebpackPlugin({template : './src/index.html', //源文件filename : 'index.html'//目标文件})}注:webpack怎么引入第三方的库 例如jqueryentry: {page: 'path/to/page.js',jquery: 'node_modules/jquery/dist/jquery.min.js'}new HtmlWebpackPlugin({filename: 'index.html',template: 'index.html',inject: true,chunks: ['jquery', 'page'] // 按照先后顺序插入script标签})
    

    (2) autoprefixer 自动检测各个浏览器加个内核前缀的插件

      安装:cnpm install --save-dev autoprefixer postcss-loader配置:var autoprefixer = require('autoprefixer');loaders:[{test:/\.css$/,//在原有基础上加上一个postcss的loader就可以了loaders:['style-loader','css-loader','postcss-loader']}]},postcss:[autoprefixer({browsers:['last 2 versions']})]

    (3) extract-text-webpack-plugin 将app.js里的css抽离成.css

     装包 npm i extract-text-webpack-plugin -D1、var ExtractTextPlugin = require("extract-text-webpack-plugin")2、 配置插件 在module中module : {...plugins : [//new 插件的实例new ExtractTextPlugin({filename : 'style/app.css'})]}3、 对scss进行改造{test : /\.scss$/,use : [//css抽离ExtractTextPlugin.extract({fallback :'style-loader',  //style-loader是把文本放到页面上use : ['css-loader','sass-loader']  //从后往前执行})] }如果

    (4)webpack.optimize.UglifyJsPlugin 代码压缩
    内置核心插件 和 uglifyjs-webpack-plugin 这个插件一样

       var webpack = require('webpack')在plugins中plugin : {...new webpack.optimize.UglifyJsPlugin({compress{warings:false    //去掉警告}, output:{comments:false }})}

    (5) open-brower-webpack-plugin 自动在浏览器中打开页面 方便开发

       下载:npm i open-browser-webpack-plugin -Dvar OpenBrowser = require('open-brower-webpack-plugin')plugins : [...new OpenBrowser({url : 'http://localhost:4000'})]

    (6) on-build-webpack 删除之前版本

       下载:npm install --save-dev on-build-webpack//webpack.config.jsvar WebpackOnBuildPlugin = require('on-build-webpack');var fs = require("fs");//设置为你的目标文件夹地址var buildDir = './dist/';...plugin:[new WebpackOnBuildPlugin(function(stats) {const newlyCreatedAssets = stats.compilation.assets;const unlinked = [];fs.readdir(path.resolve(buildDir), (err, files) => {files.forEach(file => {if (!newlyCreatedAssets[file]) {fs.unlink(path.resolve(buildDir + file));unlinked.push(file);}});if (unlinked.length > 0) {console.log('删除文件: ', unlinked);}});    })]
    续...webpack二——一站到底   

webpack——一站到底一相关推荐

  1. 第四天:Vue组件的slot以及webpack

    插槽 认识slot 在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等. 插槽的目的是让我们原来的设备具备更多的扩展性.比如电脑的USB我们可以插入U盘.鼠标.键盘.硬盘.手机.音响等等 ...

  2. 深入浅出的webpack构建工具---DllPlugin DllReferencePlugin提高构建速度(七)

    阅读目录 一:什么是DllPlugin 和 DllReferencePlugin?作用是什么? 二:在项目中如何使用 DllPlugin 和 DllReferencePlugin? 三:DllPlug ...

  3. linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc

    安装webpack后,执行webpack -v命令时报错如下: [root@FreeServer ~]# webpack -v /usr/local/node-v4.4.7-linux-x64/lib ...

  4. express给html设置缓存,webpack + express 实现文件精确缓存

    由于最近开发的个人博客(Vue + node)在使用过程中,发现网络加载有点慢,所以打算对它进行一次优化.本次优化的目标如下: index.html 设置成 no-cache,这样每次请求的时候都会比 ...

  5. vue webpack打包入口文件是哪个_Vue项目起步

    一,安装nodejs软件(直接商城搜索安装即可). 二,配置npm npm install npm -g 三,配置webpack,在cmd中安装. npm install -g webpack npm ...

  6. webpack打开项目命令_webpack前端模块打包工具基本使用的详细记录(一)

    webpack简介 我们都知道,Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等 ...

  7. 在Vue的webpack中结合runder函数

    在Vue的webpack中结合runder函数 1.引入: <h1>下面是vue的内容:</h1><div id="app"><login ...

  8. webpack入门之简单例子跑起来

    webpack入门之简单例子跑起来 webpack介绍 Webpack是当下最热门的前端资源模块化管理和打包工具,它可以将很多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将按需加载 ...

  9. webpack打开项目命令_配置webpack中dev.env.js、prod.env.js,解决不同命令下项目启动和打包到指定的环境...

    前后端分离的项目开发中,我们有开发环境.测试环境.预生产环境和生产环境. 1.开发环境下调试接口的时候,一般都会有好几个接口地址(开发服务器上的,本地的,接口开发人员的,七七八八的接口地址),要根据情 ...

最新文章

  1. linux 常用命令摘录
  2. Android 中三种启用线程的方法
  3. 这一年多来,阿里Blink测试体系如何从0走向成熟?
  4. MASTER:全局上下文建模大幅提高文本识别精度
  5. mysql inet addr_InetAddress类的使用
  6. 基于Linux的系统的文件/文件夹的权限
  7. 达达开放平台php,达达开放平台对接
  8. HTML之基本布局设计之三栏式、两栏式设计
  9. 怎么用CDN给网站加速?大热的CDN,你确定你还不想了解?
  10. 爱因斯坦广义相对论:引力是时空的曲率
  11. 费解的开关 (蓝桥杯倒计时12天)
  12. react 实现tab切换 三角形筛选样式
  13. 聊一聊2038年问题
  14. 第 1 行出现错误: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-38301: 无法对回收站中的对象执行 DDL/DML
  15. 365天挑战LeetCode1000题——Day 097 神策专场: 判定是否互为字符重排 按身高排序 按位与最大的最长子数组 找到所有好下标 好路径的数目
  16. python变量与赋值教学视频_Python第一课:print()函数、变量与赋值
  17. InVEST模型 | 02 InVEST模型Python安装
  18. Redis 持久化 RDB/AOF 详解与实践
  19. matlab中结束脚本运行_一个处理dump文件的小脚本
  20. 【以太网交换安全】--- 交换机流量控制/DHCP Snooping/IP Source Guard

热门文章

  1. 解决:WebDriverException: 'chromedriver' executable needs to be in PATH
  2. CentOs 设置静态IP 方法[测试没问题]
  3. 在线计算一周的开始结束时间
  4. python ----元组方法以及修改细节
  5. Storm 性能优化
  6. 高性能的 socket 通讯服务器(完成端口模型--IOCP)
  7. 屏蔽×××S 2008报表导出格式
  8. Linux下的dhcp测试实现方法
  9. system v共享内存
  10. 光伏机器人最前线_送水、送药、送餐!哈市这些地方率先用上AI配送机器人(视频)...