小火柴的博客笔记 小火柴的博客笔记
首页
学过的习
踩过的坑
想过的事
首页
学过的习
踩过的坑
想过的事
  • 学过的习

    • CSS的样式优先级权重
    • 事件冒泡和事件捕获
    • js模块可以通过两种方式对外暴露函数
    • js中的内存泄漏和内存溢出
    • js作用域链
    • 控制台暴露vue
    • es5常用知识总结
    • es6常用知识总结
    • es7常用知识总结
    • js模块化
    • nodeJs学习
    • node搭建服务器
    • webPack学习
      • 一、概念
      • 二、webpack的基本使用
      • 三、使用webpack配置文件
      • 四、使用loader解析文件
      • 五、使用插件
      • 六、build环境的搭建
    • js原型对象和原型链的理解
    • css阻塞与js阻塞
    • ajax的学习
    • 浏览器的重绘与重排
    • 函数防抖与函数节流学习记录
    • 浏览器储存学习
    • React起步
    • React的基本使用
    • React项目搭建
    • vue中attrs和listeners的使用
    • js的精度问题
    • React的状态管理
    • yarn和npm的对比
    • websocket的使用
  • 想过的事

  • 踩过的坑

  • 前端
  • 学过的习
小火柴
目录

webPack学习

# 一、概念

Webpack是一个模块打包器(bundler)。 在Webpack看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理,它将根据模块的依赖关系进行静态分析,生成对应的静态资源 四个核心概念:

  • Entry:入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。
  • Output:output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。
  • Loader:loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只能解析: JavaScript、json)。
  • Plugins:插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。

关于Loader:

  • Webpack 本身只能加载JS/JSON模块,如果要加载其他类型的文件(模块),就需要使用对应的loader 进行转换/加载
  • Loader 本身也是运行在 node.js 环境中的 JavaScript 模块
  • 它本身是一个函数,接受源文件作为参数,返回转换的结果
  • loader 一般以 xxx-loader 的方式命名,xxx 代表了这个 loader 要做的转换功能,比如 json-loader。

关于Plugins:

  • 插件件可以完成一些loader不能完成的功能。
  • 插件的使用一般是在 webpack 的配置信息 plugins 选项中指定。
  • CleanWebpackPlugin: 自动清除指定文件夹资源
  • HtmlWebpackPlugin: 自动生成HTML文件
  • UglifyJSPlugin: 压缩js文件

webpack.config.js : 是一个node模块,返回一个 json 格式的配置信息对象

官方文档 (opens new window)




# 二、webpack的基本使用

1、 生成package.json文件

npm init //初始化(在对应的文件中)

2、安装webpack(都要安装):

 npm install webpack  -g  //全局安装
 npm install webpack  --save-dev  //局部安装

3、执行命令:

webpack src/js/index.js build/index.js //webpack会把es6的模块化语法编译成浏览器能够识别的语言。

4、package配置:

  "scripts": {
         "build": "webpack"
   },

打包应用运行:npm run build




# 三、使用webpack配置文件

webpack的核心配置文件:执行webpack命令时,会在当前目录查找webpack.config.js文件读取配置

  • entry:入口文件,将所有打包资源全部引入
  • output:输出文件,将资源输出到指定目录下
  • loader:处理webpack不能够解析的模块
  • plugins:执行loader做不了的任务
const path = require('path'); //path内置的模块,用来设置路径。

module.exports = {

   entry:'./src/js/index.js', //入口(从哪里进入开始解析)

   output: { //出口(最终加工完的代码输出到哪里)
   
         path: path.resolve(__dirname, 'build'),//输出文件路径配置
         filename: 'index.js',// 输出文件名
   
  }
};




# 四、使用loader解析文件


使用less-loader处理less文件:

  • 安装:npm install less-loader less --save-D
  • 安装:npm install css-loader style-loader --save-D
  • 向rules中写入配置:
{
       test: /\.less$/,
       use: [{
           loader: "style-loader" // 创建一个style标签,将js中的css放入其中
       }, {
           loader: "css-loader" // 将css以CommonJs语法打包到js中
       }, {
           loader: "less-loader" // 将less转换成css
       }]
 }

在入口js中引入less文件:import '../less/test.less';(为了让打包时使用此文件)



使用file-loader处理图片资源:

  • 安装:npm install --save-dev file-loader
  • loader:
{
      test: /\.(png|jpg|gif)$/,
      use: [
        {
          loader: 'file-loader', //如果不做图片转base64,可以用file-loader
          options: {
            outputPath:'img', //图片最终输出的位置
            publicPath:'../build/img',//css资源图片路径
    		name:'[hash:5].[ext]'//修改图片名称
          }
        }
      ]
 }	



使用url-loader处理图片资源

  • 安装:npm install url-loader --save-D
  • loader:
 {
       test: /\.(png|jpg|gif)$/,
       use: [
         {
           loader: 'url-loader',       //如果不做图片转base64,可以用file-loader
           options: {
             limit: 8192, //设置文件的最大的大小,大于8KB不转换,小于8KB转成base64             
             outputPath:'img',         //图片最终输出的位置
             publicPath:'../build/img',//css资源图片路径
             name:'[hash:5].[ext]'     //修改图片名称
           }
         }
       ]
  }



js语法检查

  • 安装jshint-loader:
npm i jshint-loader --save -D
npm i jshint --save -D
  • 新增loader:
{
      test: /\.js$/, // 涵盖 .js 文件
      enforce: "pre", // 预先加载好 jshint loader
      exclude: /node_modules/, // 排除掉 node_modules 文件夹下的所有文件
      use: [
        {
          loader: "jshint-loader",
          options: {
            //jslint 的错误信息在默认情况下会显示为 warning(警告)类信息
            //将 emitErrors 参数设置为 true 可使错误显示为 error(错误)类信息
            emitErrors: false,

            //jshint 默认情况下不会打断webpack编译
            //如果你想在 jshint 出现错误时,立刻停止编译
            //请设置 failOnHint 参数为true
            failOnHint: false
          }
        }
      ]
  }



es6转es5

  • 安装babel-loader:
npm install babel-loader babel-core babel-preset-es2015 --save -D
npm i babel-loader@7 --save -D
  • loader:
{
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
      loader: 'babel-loader',
      options: {
        presets: ['es2015']
      }
    }
}




# 五、使用插件


提取css,合并为单独的文件

  • 安装ExtractTextWebpackPlugin插件:
npm install extract-text-webpack-plugin --save-D
  • 引入插件:
const ExtractTextPlugin = require("extract-text-webpack-plugin");
  • 新增plugins插件配置项,并实例化ExtractTextPlugin插件:
plugins: [
 		//提取css为单独文件
 		new ExtractTextPlugin("./css/index.css"),
]
  • 修改原less-loader的配置如下:
{
     test: /\.less$/, //匹配文件的规则,说明该loader对哪个文件生效
     use: ExtractTextPlugin.extract({
       fallback: "style-loader",
       use: ["css-loader","less-loader"]
     })
 }

注:因为css提取成单独文件,不再包含在js中了,所以要修改url-loader配置publicPath:'../build/img'

html文件的处理和清除文件夹(插件HtmlWebpackPlugin)

  • 安装:
npm install --save-dev html-webpack-plugin
  • 引入插件:
var HtmlWebpackPlugin = require('html-webpack-plugin');
  • 新增一个插件配置项:
new HtmlWebpackPlugin({
      title:"webpack",
      filename:"index.html",
      template:"./src/index.html"
     })
     
备注:要在html模板中写入<title><%= htmlWebpackPlugin.options.title %></title>,title配置才生效
  • 删除掉模板html中的所有引入
  • 为了清空工作目录,安装插件(clean-webpack-plugin):
npm i clean-webpack-plugin -D
  • 引入插件:
new CleanWebpackPlugin('./build')

备注:最新版的CleanWebpackPlugin不传任何参数




# 六、build环境的搭建

  • 新建文件目录:config
  • 移动webpack.config.js文件到config中,改名为:webpack.build.js
  • 通过执行:webpack --display-modules --config ./config/webpack.build.js 指定配置文件运行
  • 在package.json中自定义命令,以后可以通过:npm run build 代替完整命令
       "build": "webpack --display-modules --config ./config/webpack.build.js"

注:如果发现build文件夹出现在了config中,解决办法如下:

修改出口output中的path为:
            resolve(__dirname, '../build')




#webPack
node搭建服务器
js原型对象和原型链的理解

← node搭建服务器 js原型对象和原型链的理解→

Theme by Vdoing | Copyright © 2021-2023 X match
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式