前端工程化webpack

这篇博客介绍了ES6的模块化规范,通过Node.js使用Babel体验模块化,并展示了如何配置Babel进行代码转换。接着讲解了Webpack的基本使用,包括打包处理CSS、JS、图片等资源,以及配置自动打包和预览页面。最后提到了Vue单文件组件的用法和Webpack在实际项目中的应用,包括Vue组件的打包和Webpack的生产环境配置。
摘要由CSDN通过智能技术生成

模块化概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

大一统的模块化规范 – ES6模块化

Node.js 中通过 babel 体验 ES6 模块化
在这里插入图片描述
打开CTRL+`打开终端

npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node
npm install --save @babel/polyfill

创建项目跟目录创建文件 babel.config.js

const presets = [
  [
    '@babel/env',
    {
      targets: {
        edge: '17',
        firefox: '60',
        chrome: '67',
        safari: '11.1'
      }
    }
  ]
]

module.exports = { presets }

通过 npx babel-node index.js 执行代码

npx babel-node .\index.js

默认导出 与 默认导入
在这里插入图片描述

let a = 10
let c = 20
let d = 30

function show() {
  console.log('1111111111111')
}

export default {
  a,
  c,
  show
}



import m1 from './m1.js'
console.log(m1)

在这里插入图片描述
在这里插入图片描述

let a = 10
let c = 20
let d = 30

function show() {
    console.log('1111111111111')
}

export default {
    a,
    c,
    show
}

export let s1 = 'aaa'
export let s2 = 'ccc'
export function say() {
    console.log('ooooooooo')
}

// export default {
//   d
// }
import m1, { s1, s2 as ss2, say } from './m1.js'

console.log(m1)
console.log(s1)
console.log(ss2)
console.log(say)

在这里插入图片描述

直接导入并执行模块代码
在这里插入图片描述

for (let i = 0; i < 3; i++) {
  console.log(i)
}

import './m2.js'

在这里插入图片描述
当前 Web 开发面临的困境
在这里插入图片描述

webpack 概述

在这里插入图片描述

webpack 的基本使用

创建列表隔行变色项目
在这里插入图片描述

npm init -y
npm install jquery –S

import $ from 'jquery'
$(function() {
  $('li:odd').css('backgroundColor', 'blue')
  $('li:even').css('backgroundColor', 'lightblue')
})
<script src="./index.js"></script> 
</head>
  <body>
    <input type="text" placeholder="ceshi" />
    <ul>
      <li>这是第1个li</li>
      <li>这是第2个li</li>
      <li>这是第3个li</li>
      <li>这是第4个li</li>
      <li>这是第5个li</li>
      <li>这是第6个li</li>
      <li>这是第7个li</li>
      <li>这是第8个li</li>
      <li>这是第9个li</li>
    </ul>

在项目中安装和配置 webpack
在这里插入图片描述

npm install webpack webpack-cli –D
module.exports = {
  // 编译模式
  mode: 'development', // development  production
"dev": "webpack
 npm run dev

在这里插入图片描述

module.exports = {
    mode: 'production' // mode 用来指定构建模式
}

在这里插入图片描述
main.js的大小大大变小,所以应该在上线前改为production
配置打包的入口与出口
在这里插入图片描述

const path = require('path')
module.exports = {
    mode: 'production', // mode 用来指定构建模式
    entry: path.join(__dirname, './src/index.js'),
    output: {
        path: path.join(__dirname, './dist'), // 输出文件的存放路径
        filename: 'bundle.js' // 输出文件的名称
    }
}
  <script src="/bundle.js"></script>

生成新的bundle.js文件
配置 webpack 的自动打包功能
在这里插入图片描述

npm install webpack-dev-server –D
"scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "dev": "webpack-dev-server"
    },
 <script src="/bundle.js"></script>
npm run dev

在这里插入图片描述
在这里插入图片描述

配置 html-webpack-plugin 生成预览页面

在这里插入图片描述

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlguin = new HtmlWebpackPlugin({
    template: './src/index.html',
    filename: 'index.html'
})
module.exports = {
    mode: 'production', // mode 用来指定构建模式
    entry: path.join(__dirname, './src/index.js'),
    output: {
        path: path.join(__dirname, './dist'), // 输出文件的存放路径
        filename: 'bundle.js' // 输出文件的名称
    },
    plugins: [htmlPlguin]
}

在访问8080端口时可以直接看到预设置的页面
在这里插入图片描述
配置自动打包相关的参数
在这里插入图片描述
可以自动弹出,并改变浏览器的ip和端口
在这里插入图片描述

webpack 中的加载器

通过 loader 打包非 js 模块
在这里插入图片描述
在这里插入图片描述
webpack 中加载器的基本使用
在这里插入图片描述

webpack 中加载器的基本使用

打包处理 css 文件
在这里插入图片描述
在这里插入图片描述

npm i style-loader css-loader -D
 module: {
        rules: [
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }
        ]
    }
}
li {
    list-style: none;
}
import './css/1.css'

在这里插入图片描述
打包处理 less 文件
在这里插入图片描述

npm i less-loader less -D
  { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
body {
  margin: 0;
  padding: 0;
  ul {
    padding: 0;
    margin: 0;
  }
}
import './css/1.less'

在这里插入图片描述
打包处理 scss 文件
在这里插入图片描述

webpack 中加载器的基本使用

配置 postCSS 自动添加 css 的兼容前缀

在这里插入图片描述

const autoprefixer = require('autoprefixer')

module.exports = {
  plugins: [autoprefixer]
}

 <input type="text" placeholder="ceshi" />
 { test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader'] },

一种解决兼容的方式
在这里插入图片描述
打包样式表中的图片和字体文件
在这里插入图片描述

npm i url-loader file-loader -D
 { test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/, type: 'asset' }
#box {
  width: 580px;
  height: 340px;
  background-color: pink;
  background: url('../images/1.jpg');
}

由于我使用的 Webpack 的版本是 “webpack”: “^5.57.1” ,已经是 5.0 版本及以上了,而采用之前 5.0 版本以下的方法是行不通的;将use改为type设置才能使图片显示出来
在这里插入图片描述

打包处理 js 文件中的高级语法

在这里插入图片描述

class Person {
    static info = 'aaa'
}

console.log(Person.info)

npm i babel-loader @babel/core @babel/runtime -D

npm i @babel/preset-env @babel/plugin-transformruntime @babel/plugin-proposal-class-properties –D
module.exports = {
  presets: ['@babel/preset-env'],
  plugins: ['@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties']
}

 { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }

在这里插入图片描述
事实上没有配置前也成功加载了。待研究

Vue 单文件组件

传统组件的问题和解决方案
在这里插入图片描述
Vue 单文件组件的基本用法
在这里插入图片描述
在这里插入图片描述

<template>
  <div>
    <h1>这是 App 根组件</h1>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {}
};
</script>

<style scoped>
h1 {
  color: red;
}
</style>

在这里插入图片描述

npm i vue-loader vue-template-compiler -D
import App from './components/App.vue'
const VueLoaderPlugin = require('vue-loader/lib/plugin')
{ test: /\.vue$/, use: 'vue-loader' }

在 webpack 项目中使用 vue
在这里插入图片描述

npm i vue –S
import Vue from 'vue'

const vm = new Vue({
    el: '#app',
    render: h => h(App)
})
 <div id="app"></div>

在这里插入图片描述

webpack 打包发布

在这里插入图片描述

"build": "webpack -p",

将dist目录删掉,会生成新的dist目录
打开可以看到正常显示

在这里插入图片描述
完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值