web前端一起努力

webPack基础

2018-10-18  本文已影响0人  追逐_chase
webPack.jpg

webPack

中文网站

webpack :是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

静态资源

安装

使用报错

image.png

配置文件

//webpack命令指向步骤
//1.webpack发现,我们没有通过命令的形式,给它指定入口和出口
//2.webpack就会去项目的根目录中,查找一个叫做:”webpack.config.js“的配置文件
//3.当找到配置文件之后,就会解析执行这个配置文件,解析执行完成后,就得到一个配置文件中导出的配置对象
//4.当webpack拿到配置对象的时候,就得到了配置对象中的指定的入口和出口,然后进行打包

var path = require("path")

//webpack配置文件
module.exports = {
    //配置文件需要指出,入口 和出口
    //入口,表示要使用webpack打包那个文件
    entry:path.join(__dirname,"./src/main.js"),
    //输入文件的相关配置
    output:{
        //指定打包好的文件,输入到那个目录中去
        path:path.join(__dirname,"./dist"),
        //指定输入文件的名称
        filename:"bundle.js"
    }
}

webpack-dev-server工具

  1. npm i webpack-dev-server -D 安装这个工具到项目本地
  2. 安装完毕后,这个工具的用法和webpack命令完全一样
    3.由于项目中,本地安装的webpack-dev-server,
    4.注意:webpack-dev-server这个工具,如果想要正常运行,要求没在本地项目中,必须安装webpack
    5.webpack-dev-server帮我们打包生成的bundle.js文件,并没有存放到实际的屋里磁盘上,而是直接托管到电脑内存中,所以我们在项目跟目录中根本找不到这个打包好的bundle.js文件
    6.我们认为,webpack-dev-server把打包好的文件,以一种虚拟的形式,托管到项目的根目录中,虽然我们看不到它,但是可以和dist,src文件夹同级存在的
image.png
{
  "name": "webPack",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
//当运行 npm run dev这个命令的时候,自动打开浏览器
//定义端口 --port 3000
//--contentBase src设置根路径是src
// --hot 热更新  就是你更改文件里面代码,会生成2个局部更改的文件,一个.js,一个是.json,  
// --hot 自动刷新页面
    "dev": "webpack-dev-server --open --port 3000 --contentBase src  --hot",
    "build": "webpack --mode production"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "jquery": "^3.3.1"
  },
  "devDependencies": {
    "@webpack-cli/init": "^0.1.2",
    "webpack": "^4.20.2",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.9"
  },
  "description": ""
}

image.png

插件

var path = require("path")

//启用热跟新的第2步
const webpack = require("webpack")

//导入安装的插件
const htmlWebpack = require("html-webpack-plugin")
//作用: 1.自动生成内存中根据指定页面生成的一个内存页面
//2.自动,把打包好的bundle.js文件 写入

//webpack配置文件
module.exports = {
    //配置文件需要指出,入口 和出口
    //入口,表示要使用webpack打包那个文件
    entry:path.join(__dirname,"./src/main.js"),
    //输入文件的相关配置
    output:{
        //指定打包好的文件,输入到那个目录中去
        path:path.join(__dirname,"./dist"),
        //指定输入文件的名称
        filename:"bundle.js"
    },
    //devServer 和 package.json文件中的dev配置 起到一样的作用
    //配置webpack-dev-server参数的第二种形式
    
    devServer:{
        //配置端口
        port:3000,
        //自动打开浏览器
        open:true,
        //指定根路径
        contentBase:"src",
        //热跟新 的第一步
        hot:true
    },
    

    //插件

    
    plugins:[
        //配置插件的节点
        //创建一个更新的模块对象
        new webpack.HotModuleReplacementPlugin(),
        //创建 htmlWebpack对象
        new htmlWebpack({
            //创建一个 在内存中 生成html 页面的插件
            //指定模板界面,将来根据指定的模板界面,去生成内存中的页面
            template:path.join(__dirname,"./src/index.html"),
            //指定生成页面的名称
            filename:"index.html",
            inject:"head",
            title:"插件的使用"
        })
        

    ]

 
}

loader

// 1.导入样式表 在main.js文件中
//导入样式表
import "./css/index.css"

//2.在配置文件中 配置规则

var path = require("path")

//启用热跟新的第2步
const webpack = require("webpack")

//导入安装的插件
const htmlWebpack = require("html-webpack-plugin")
//作用: 1.自动生成内存中根据指定页面生成的一个内存页面
//2.自动,把打包好的bundle.js文件 写入

//webpack配置文件
module.exports = {
    //配置文件需要指出,入口 和出口
    //入口,表示要使用webpack打包那个文件
    entry:path.join(__dirname,"./src/main.js"),
    //输入文件的相关配置
    output:{
        //指定打包好的文件,输入到那个目录中去
        path:path.join(__dirname,"./dist"),
        //指定输入文件的名称
        filename:"bundle.js"
    },
    //devServer 和 package.json文件中的dev配置 起到一样的作用
    //配置webpack-dev-server参数的第二种形式
    
    devServer:{
        //配置端口
        port:3000,
        //自动打开浏览器
        open:true,
        //指定根路径
        contentBase:"src",
        //热跟新 的第一步
        hot:true
    },
    

    //插件

    
    plugins:[
        //配置插件的节点
        //创建一个更新的模块对象
        new webpack.HotModuleReplacementPlugin(),
        //创建 htmlWebpack对象
        new htmlWebpack({
            //创建一个 在内存中 生成html 页面的插件
            //指定模板界面,将来根据指定的模板界面,去生成内存中的页面
            template:path.join(__dirname,"./src/index.html"),
            //指定生成页面的名称
            filename:"index.html",
            inject:"head",
            title:"插件的使用"
        })
        

    ],
    //这个节点 用于配置所有的第三方模块 加载器
    module:{
        rules: [
            //第三方模块的匹配规则
            //test是正则表达式
            //配置处理.css文件的规则
            {test:/\.css$/,use:['style-loader','css-loader']}

        ]
    }

  
}





//处理过程
/**
 * 1.要处理的文件不是JS文件,然后就去配置文件中,查找有没有对应的大三房loader规则
 * 2.如果能找到对应的规则,就会调用对应的loader 处理 这种类型
 * 3.在调用loader的时候,是从右向左执行的
 * 4.当最后一个loader调用完毕,会把处理的结果,直接交给webpack进行打包合并,最终输出到bundle.js中去
 */

//处理图片 路径 可以传入参数(固定的) limit,当给limit的值 大于图片的实际值的时候就会base64转码,当等于小于图片实际大小(字节)的时候,就显示URL
//参数name,使用[name].[ext]之后是不改变图片的原来的名称和后缀名
{test:/\.(jpg|png|gif|bmp|jpeg)$/,use:"url-loader?limit=19495&name=[name].[ext]"}

{test:/\.(jpg|png|gif|bmp|jpeg)$/,use:"url-loader?limit=19480&name=[hash:8]-[name].[ext]"}

Babel

第一个套:npm i babel-core babel-loader babel-plugin-transform-runtime -D
第二套: npm i babel-preset-env babel-preset-stage-0 -D

在配置babel的规则时,必须把node_modules文件目录,通过exclude选项排除掉,不然的话,webpack会把这个目录里面的js文件打包编译,这样会非常慢,消耗cpu

{
   //语法
    "presets":["env","stage-0"],
  //插件
    "plugins":["transform-runtime"]
}
image.png

配置文件

var path = require("path")
//启用热跟新的第2步
const webpack = require("webpack")

//导入安装的插件
const htmlWebpack = require("html-webpack-plugin")
//作用: 1.自动生成内存中根据指定页面生成的一个内存页面
//2.自动,把打包好的bundle.js文件 写入

//webpack配置文件
module.exports = {
    //配置文件需要指出,入口 和出口
    //入口,表示要使用webpack打包那个文件
    entry:path.join(__dirname,"./src/main.js"),
    //输入文件的相关配置
    output:{
        //指定打包好的文件,输入到那个目录中去
        path:path.join(__dirname,"./dist"),
        //指定输入文件的名称
        filename:"bundle.js"
    },
    //devServer 和 package.json文件中的dev配置 起到一样的作用
    //配置webpack-dev-server参数的第二种形式
    
    devServer:{
        //配置端口
        port:3000,
        //自动打开浏览器
        open:true,
        //指定根路径
        contentBase:"src",
        //热跟新 的第一步
        hot:true
    },
    

    //插件

    
    plugins:[
        //配置插件的节点
        //创建一个更新的模块对象
        new webpack.HotModuleReplacementPlugin(),
        //创建 htmlWebpack对象
        new htmlWebpack({
            //创建一个 在内存中 生成html 页面的插件
            //指定模板界面,将来根据指定的模板界面,去生成内存中的页面
            template:path.join(__dirname,"./src/index.html"),
            //指定生成页面的名称
            filename:"index.html",
            inject:"head",
            title:"插件的使用"
        })
        

    ],

    //这个节点 用于配置所有的第三方模块 加载器
    module:{
        rules: [
            //第三方模块的匹配规则
            //配置处理.css文件的规则
            {test:/\.css$/,use:['style-loader','css-loader']},
            //less也是属于样式的 所以前面要匹配 样式loader
            {test:/\.less$/,use:['style-loader','css-loader','less-loader']},
            {test:/\.scss$/,use:['style-loader','css-loader','sass-loader']},
            //处理图片 路径  可以传入参数(固定的) limit,当给limit的值 大于图片的实际值的时候就会base64转码,当等于小于图片实际大小(字节)的时候,就显示URL
            //参数name,使用[name].[ext]之后是不改变图片的原来的名称和后缀名
            //如果不同的文件夹下面有相同的名称的图片,那么后着将会覆盖前者,为了解决这样的问题,需要在前面加一个哈希值[hash:8]表示取前8为的哈希值
            {test:/\.(jpg|png|gif|bmp|jpeg)$/,use:"url-loader?limit=19480&name=[hash:8]-[name].[ext]"},
            //配置babel来转化高级的es6/7的语法
            {test:/\.js$/,use:"babel-loader",exclude:/node_modules/}

        ]
    }

}


image.png
上一篇 下一篇

猜你喜欢

热点阅读