前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
  • JavaScript Part 1

    • Ajax总结篇
    • Canvas 绘制八大行星
    • DOM编程之API学习总结篇
    • JavaScript事件机制
    • JavaScript代码片段100个
    • JavaScript作用域分析总结
    • JavaScript原型链回顾
    • JavaScript及jQuery中的各种宽高属性图解
    • JavaScript工程项目的一系列最佳实践
    • JavaScript常用API合集
    • JavaScript数组、字符串、对象常用方法
    • JavaScript数组方法总结篇
    • JavaScript深浅拷贝
    • JavaScript运动框架之速度时间版本
    • JavaScript运行机制Event Loop
    • JavaScript防抖节流原理
    • Javascript中的复制粘贴功能
    • Javascript数组详解
    • OOP之原型与原型链
    • Object.defineProperty详解
    • V8源码浅析JS数组常见方法
    • await 在 forEach 中不生效解决方案
    • iframe+表单跨域提交POST请求
    • javascript笔记总结篇
    • 业务中处理数据结构常用的JS方法
    • 作用域
    • 你真的掌握变量和类型了吗
    • 前后端分离之数据Mock
    • 原型与原型链
    • 原生JS补给(上)
    • 如何写出一个惊艳面试官的深拷贝
    • 带你填一些JS容易出错的坑
    • 彻底弄懂 JavaScript 执行机制
    • 执行上下文 执行栈
    • 正则回顾总结
    • 正则基础知识
    • 正则完整篇
    • 正则表达式
    • 浅析Promise原理
    • 浅谈JavaScript中的异步处理
    • 深拷贝 vs 浅拷贝
    • 聊一聊typeof instanceof 实现原理.
    • 聊一聊闭包
    • 高阶函数map reduce filter
  • JavaScript Part 2

  • CSS

  • HTML

  • Jquery

  • ES6

  • 小程序

  • Vue

  • React

  • 深入React

  • React Native

  • NodeJS

  • Angular

  • TypeScript

  • Webpack

  • 浏览器

  • 移动端

  • 前端工程化

  • Electron

  • HTTP

  • Nginx

  • Linux

  • 数据结构与算法

  • LeetCode算法题

  • 综合

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

vueLoader篇|博客系列

# 新建一个空的webpack项目

mkdir webpack-vue-cli && cd webpack-vue-cli
npm init -y
touch webpack.config.js
@前端进阶之旅: 代码已经复制到剪贴板

# 创建一些基础的目录结构:

mkdir src && cd src
touch main.js && touch App.vue
mkdir assets && mkdir components && mkdir styles
cd ../
mkdir public && cd public
touch index.html
@前端进阶之旅: 代码已经复制到剪贴板

# 安装一些基本的依赖

# 1. 保证webpack的基本功能

cnpm i --save-dev webpack webpack-cli
@前端进阶之旅: 代码已经复制到剪贴板

配置入口和出口

webpack.config.js:

const path = require('path')
module.exports = {
	entry: './src/main.js',
	output: {
  	filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
}
@前端进阶之旅: 代码已经复制到剪贴板

# 2. 配置html模版和清理dist的插件

cnpm i --save-dev html-webpack-plugin clean-webpack-plugin
@前端进阶之旅: 代码已经复制到剪贴板
const path = require('path')
+ const HtmlWebpackPlugin = require('html-webpack-plugin')
+ const { CleanWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
	entry: './src/main.js',
	output: {
  	filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
-  } 
+  },
+  plugins: [
+  	new CleanWebpackPlugin(), // 清理dist
+    new HtmlWebpackPlugin({ // html模版
+    	title: 'webpack-vue',
+    	template: './public/index.html'
+    })
+  ]
}
@前端进阶之旅: 代码已经复制到剪贴板

# 3. 保证能本地启动web服务器

模拟vue-cli的开发环境

cnpm i --save-dev webpack-dev-server
@前端进阶之旅: 代码已经复制到剪贴板
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
	entry: './src/main.js',
	output: {
  	filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
+  devServer: {
+			contentBase: './dist',
+     open: true
+  },
  plugins: [
  	new CleanWebpackPlugin(), // 清理dist
    new HtmlWebpackPlugin({ // html模版
    	title: 'webpack-vue',
    	template: './public/index.html'
    })
  ]
}
@前端进阶之旅: 代码已经复制到剪贴板

并在package.json中添加两条脚本命令, 一个是本地的开发命令, 一个是发布到生产环境的打包命令:

{
	"scripts": {
		"serve": "webpack-dev-server",
		"build": "webpack"
	}
}
@前端进阶之旅: 代码已经复制到剪贴板

# 4. 保证能使用vue单文件

cnpm i -D vue-loader vue-template-compiler
@前端进阶之旅: 代码已经复制到剪贴板
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
+ const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
	entry: './src/main.js',
	output: {
  	filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer: {
		 contentBase: './dist',
     open: true
  },
+  module: {
+  	rules: [{
+  		test: /.vue$/,
+  		loader: 'vue-loader'
+  	}]
+  },
  plugins: [
  	new CleanWebpackPlugin(), // 清理dist
    new HtmlWebpackPlugin({ // html模版
    	title: 'webpack-vue',
    	template: './public/index.html'
-    })
+    }),
+   new VueLoaderPlugin()
  ]
}
@前端进阶之旅: 代码已经复制到剪贴板

# 5. 处理css

cnpm i --save-dev style-loader css-loader vue-style-loader
@前端进阶之旅: 代码已经复制到剪贴板

在webpack.config.s中配置规则:

module.exports = {
	rules: [
		{
			test: /\.css$/,
      use: [
      	'style-loader',
      	'css-loader'
      ]
		}
	]
}
@前端进阶之旅: 代码已经复制到剪贴板

(由于之前安装了vue-loader, 它能够处理每个vue文件中scoped的样式, 所以不要额外处理)

(安装vue-style-loader, 使得我们编辑vue文件中的<style>能够热重载)

# 6. 编写基本代码并跑一个试试

完成上述操作, 让我们写一些简单的代码看看能不能将项目跑起来.

这里我是模拟vue-cli的项目结构进行配置的:

src/main.js:

import Vue from 'vue';
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
    render: h => h(App)
}).$mount('#app')
@前端进阶之旅: 代码已经复制到剪贴板

src/App.vue:

<template>
  <div id="app">
    <div class="content">
      {{ msg }}
    </div>
  </div>
</template>
<script>
export default {
  name: 'app',
  components: {},
  data() {
    return {
      msg: 'Hello LinDaiDai222'
    }
  }
}
</script>
<style>
body {
  margin: 0;
}
</style>
@前端进阶之旅: 代码已经复制到剪贴板

public/index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%= htmlWebpackPlugin.options.title %></title>
</head>

<body>
    <noscript>
      <strong>We're sorry but bpmn-vue-basic doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
</body>
</html>
@前端进阶之旅: 代码已经复制到剪贴板

这个文件是为了提供一个生成html的模版.

Now let’s try!!!

允许之前配置好的指令:

npm run serve
@前端进阶之旅: 代码已经复制到剪贴板

发现是可以正常打开显示页面的, 而且更新了本地代码, 页面也会自动重载.

# 处理资源路径

为了处理项目中的资源路径, 例如img标签的src, 我们需要用到file-loader或者url-loader.

如果不做这些处理的话, 在项目使用图片就会报错了.

两种loader都可以.

# 1. 使用file-loader

cnpm i --save-dev file-loader
@前端进阶之旅: 代码已经复制到剪贴板
module.exports = {
	rules: [
		{
			test: /.(png|jpg|svg|gif)$/,
      use: [
      	{
          loader: 'file-loader',
          options: {
            esModule: false // 配置此选项保证能在html中加载图片路径
          }
        }
      ]
		}
	]
}
@前端进阶之旅: 代码已经复制到剪贴板

# 2. 使用url-loader

cnpm i --save-dev url-loader file-loader
@前端进阶之旅: 代码已经复制到剪贴板
module.exports = {
	rules: [
		{
			test: /.(png|jpg|svg|gif)$/,
      use: [
      	{
          loader: 'url-loader',
          options: {
          	limit: 40000, // 大于该值则交给 file-loader 处理
            esModule: false // 配置此选项保证能在html中加载图片路径
          }
        }
      ]
		}
	]
}
@前端进阶之旅: 代码已经复制到剪贴板

# 3. 添加一张png图片

在App.vue中添加一张图片:

<img src="./assets/LinDaiDai.png" />
@前端进阶之旅: 代码已经复制到剪贴板

用上面两种配置方式, 都可以正常显示.

# 使用预处理器sass

安装:

cnpm i -D sass-loader node-sass
@前端进阶之旅: 代码已经复制到剪贴板

配置:

rules: [{
	test: /\.scss$/,
	use: [
		'vue-style-loader',
		'css-style-loader',
		'sass-loader'
	]
}]
@前端进阶之旅: 代码已经复制到剪贴板

在styles文件夹下新建common.scss:

.color_blue {
	color: blue;
}
@前端进阶之旅: 代码已经复制到剪贴板

在main.js中引用:

← loader篇webpack4配置详解 →

fe
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
  • JavaScript Part 1

    • Ajax总结篇
    • Canvas 绘制八大行星
    • DOM编程之API学习总结篇
    • JavaScript事件机制
    • JavaScript代码片段100个
    • JavaScript作用域分析总结
    • JavaScript原型链回顾
    • JavaScript及jQuery中的各种宽高属性图解
    • JavaScript工程项目的一系列最佳实践
    • JavaScript常用API合集
    • JavaScript数组、字符串、对象常用方法
    • JavaScript数组方法总结篇
    • JavaScript深浅拷贝
    • JavaScript运动框架之速度时间版本
    • JavaScript运行机制Event Loop
    • JavaScript防抖节流原理
    • Javascript中的复制粘贴功能
    • Javascript数组详解
    • OOP之原型与原型链
    • Object.defineProperty详解
    • V8源码浅析JS数组常见方法
    • await 在 forEach 中不生效解决方案
    • iframe+表单跨域提交POST请求
    • javascript笔记总结篇
    • 业务中处理数据结构常用的JS方法
    • 作用域
    • 你真的掌握变量和类型了吗
    • 前后端分离之数据Mock
    • 原型与原型链
    • 原生JS补给(上)
    • 如何写出一个惊艳面试官的深拷贝
    • 带你填一些JS容易出错的坑
    • 彻底弄懂 JavaScript 执行机制
    • 执行上下文 执行栈
    • 正则回顾总结
    • 正则基础知识
    • 正则完整篇
    • 正则表达式
    • 浅析Promise原理
    • 浅谈JavaScript中的异步处理
    • 深拷贝 vs 浅拷贝
    • 聊一聊typeof instanceof 实现原理.
    • 聊一聊闭包
    • 高阶函数map reduce filter
  • JavaScript Part 2

  • CSS

  • HTML

  • Jquery

  • ES6

  • 小程序

  • Vue

  • React

  • 深入React

  • React Native

  • NodeJS

  • Angular

  • TypeScript

  • Webpack

  • 浏览器

  • 移动端

  • 前端工程化

  • Electron

  • HTTP

  • Nginx

  • Linux

  • 数据结构与算法

  • LeetCode算法题

  • 综合