初识webpack(一)

webpack入门

目录

一): webpack入门案例

二): 处理css、scss

三): 通过loader单独生成css等文件

四): 通过插件·压缩 js/css 文件

Webpack 是一个前端资源加载和打包工具。所谓的模块就是在平时的前端开发中,用到一些静态资源,如JavaScript、CSS、图片等文件,webpack就将这些静态资源文件称之为模块。 webpack支持AMD和CommonJS,以及其他的一些模块系统,并且兼容多种JS书写规范,可以处理模块间的依赖关系,所以具有更强大的JS模块化的功能,它能对静态资源进行统一的管理以及打包发布。 
作为一款 Grunt和Gulp的替代产品,Webpack受到大多数开发者的喜爱,因为它能够编译打包CSS,做CSS预处理,对JS的方言进行编译,打包图片,代码压缩等等。

与其他的构建工具相比,Webpack具有如下的一些优势:

  • 对 CommonJS 、 AMD 、ES6 的语法做了兼容;
  • 对 js、css、图片等资源文件都支持打包;
  • 串联式模块加载器以及插件机制,让其具有更好的灵活性和扩展性,例如提供对 CoffeeScript、ES6的支持;
  • 有独立的配置文件 webpack.config.js;
  • 可以将代码切割成不同的 chunk,实现按需加载,降低了初始化时间;
  • 支持 SourceUrls 和 SourceMaps,易于调试;
  • 具有强大的 Plugin 接口,大多是内部插件,使用起来比较灵活;
  • webpack 使用异步 IO 并具有多级缓存。这使得 webpack 很快且在增量编译上更加快       

一): webpack入门案例 

初始化生成package.json

npm init -y

 

 通过npm 在本地安装 webpack 

npm install webpack -D

 完成之后会发现文件夹下回有一个node_modules 文件夹

 

这个时候还需要安装一个webpack-cli

npm install webpack-cli -D

 并建立这样一个文件目录

 此时我们还要下载一个loadsh依赖文件

npm install loadsh -p

 接下来我们便开始进入正题了

在src 目录下面的index.js 文件中我们随便写入这样一段简单的JavaScript代码

 

然后在根目录下建立一个webpack.config.js 配置文件, webpack.config.js文件通常放在项目的根目录中,它本身也是一个标准的Commonjs规范的模块 ,这个文件名是默认的一般不更改 

通过 npx webpack -h  我们查看帮助便知道原因了

 webpack.config.js是webpack的config文件,作用是告诉webpack如何把你的项目当中的js文件整合成一个并且附加版本号,以及uglify。这里面有 入口配置 entry 出口配置output 

const path = require("path");

module.exports = {
  entry: "./src/index.js",
  mode: "development",
  
  output: {
    filename: "main.js",
    path: path.resolve(__dirname, "dist")
  },
 
};

执行

npx webpack

这是我们就会看到dist 目录下面有一个main.js 在同级目录下面的index.js 文件中引入这个main.js 就可以运行了 我们的入门案例也结束了。

二): 处理css、scss

同样我们在src 目录下建立一个style 文件夹 再建一个 a.css 和一个 a.scss文件写入如下代码

在src/index.js中引入这两个样式 :

import _ from 'lodash';
import './style/style.css'
import './style/a.scss'

function createEle() {
    let dom = document.createElement('div');
    dom.innerHTML = _.join(['fuck','webpack'],'');
    document.body.appendChild(dom);
}
    createEle();

 我们需要引入style-loader 和 css-loader 和sass-loader

npm install style-loader css-loader -D
npm install sass-loader node-sass -D

 

css-loader:  加载css文件;

style-loader: 使用<style> 将css-loader内部样式注入到我们的html页面

在webpack.config.js中配置如下:

const path = require("path");

module.exports = {
  entry: "./src/index.js",
  mode: "development",
  output: {
    filename: "main.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.(sc|c|sa)ss$/,
        use: [
          {
            loader: "style-loader"
          },
          {
            loader: "css-loader",
            options: {
              sourceMap: true//文件定位
            }
          },
          {
            loader: "sass-loader",
            options: {
              sourceMap: true
            }
          }
        ]
      }
    ]
  }
};

加载语法如下 详情可以看官方api文档: 

 

 module: {

     rules: {

          text: "  "

          use:['xxx-loader']

        }

}

最后执行npx webpack就打包完成了。

三): 生成独立的css文件

样式抽离我们需要用到 mini-css-extract-plugin插件

npm install mini-css-extract-plugin -D
const path = require("path");
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  entry: "./src/index.js",
  mode: "production",
  output: {
    filename: "main.js",
    path: path.resolve(__dirname, "dist")//css文件的输出位置
  },
  module: {
    rules: [
      {
        test: /\.(sc|c|sa)ss$/,
        use: [
            MiniCssExtractPlugin.loader,
          {
            loader: "css-loader",
            options: {
              sourceMap: true
            }
          },
          {
            loader: "sass-loader",
            options: {
              sourceMap: true
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
        filename:  "[name].css",
        chunkFilename: "[id].css"
    })
  ] 
}

 执行npx webpack

四): js/css 的压缩 

压缩css需要用到 optimize-css-assets-webpack-plugin插件

npm install optimize-css-assets-webpack-plugin -D

js压缩需要用到uglifyjs-webpack-plugin插件

npm install uglifyjs-webpack-plugin -D

webpack.config.js 配置如下

const path = require("path");
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const optimizeCss = require('optimize-css-assets-webpack-plugin');

module.exports = {
  entry: "./src/index.js",
  mode: "production",
  output: {
    filename: "main.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.(sc|c|sa)ss$/,
        use: [
            MiniCssExtractPlugin.loader,
          {
            loader: "css-loader",
            options: {
              sourceMap: true
            }
          },
          {
            loader: "sass-loader",
            options: {
              sourceMap: true
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
        filename:  "[name].css",
        chunkFilename: "[id].css"
    })
  ],
  optimization: {
    // minimize: true,
    minimizer: [ 
      new optimizeCss(), 
      new UglifyJSPlugin({
        cache: true,
        parallel: true,
        sourceMap: true
      })
    ]
  }
  
}

执行npx webpack

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值