小满视频
学习总结
1. 多看看webpack官网
2. webpack的作用:配置一堆东西,达到运行程序的目的
3. 无论什么东西都转成js,然后插入到一个空空的html文件中运行
4. webpack就是个管理者,管理着一堆loader,一堆loader的作用就是把自己负责的东西弄成js
webpack官网链接
pnpm init
执行命令后自动创建package.json文件,内容如下:
{
"name": "webpack-demo", 项目的名称
"version": "1.0.0",项目的版本号
"description": "",项目的简短描述
"main": "index.js",项目的主入口文件
"scripts": {项目的脚本命令,如测试脚本。
"test": "echo \"Error: no test specified\" && exit 1"定义了一个简单的测试命令,当运行 npm test 时,会输出错误信息并退出。
},
"keywords": [],项目的关键词列表,用于搜索和分类
"author": "",项目的作者信息
"license": "ISC"项目的许可类型
}
pnpm i typescript -g
tsc --init
{
"compilerOptions": {
target: es2016 设置目标 ECMAScript 版本
module: commonjs 指定模块系统。这里的 "commonjs" 表示使用 CommonJS 模块系统。
strict: true 启用所有严格的类型检查选项
esModuleInterop: true 启用 ES 模块与 CommonJS 模块之间的互操作性。这里的 true 表示启用此功能。
skipLibCheck: true 是否跳过类型声明文件的检查。这里的 true 表示跳过类型声明文件的检查。
forceConsistentCasingInFileNames: true 强制要求文件名大小写一致。这里的 true 表示启用此功能。
}
}
-查看全局安装的插件的安装位置
npm config get prefix
webpack官网
webpack.config.js
文件中所有的配置项都是webpack管理的
安装webpack
pnpm add webpack -D
webpack.config.js
文件webpack.config.js
中配置打包的入口和出口文件及打包后文件的路径const config = {
mode: 'development', // 开发模式
entry: "./src/main.ts", // 入口文件
output: {
filename: "[fullhash].js", // 输出文件名
path: path.resolve(__dirname , "dist") // 输出路径
},
}
module.exports = config;
__dirname: 表示当前配置文件所在的目录。
‘dist’: 表示输出文件所在的子目录名。
path.resolve: 用于将相对路径转换为绝对路径。
pnpm add webpack-cli -D
package.json
文件中配置打包命令 "scripts": {
"bulid": "webpack",
...
...
},
webpack-cli 是 Webpack 提供的命令行工具,用于在命令行中执行 Webpack 相关的操作。webpack-cli 主要完成以下几项工作:
在命令行输入:pnpm run dev
、 pnpm run build
时,通过webpack-cli
执行webpack中的命令
,并使用相应的配置,比如:webpack.config.js
中打包的入口和出口等配置项
不安装此插件也可以运行webpack,只不过可能需要很多复杂的命令
pnpm add webpack-dev-server -D
pnpm add html-webpack-plugin -D
package.json
文件中配置运行命令 "scripts": {
"dev":"webpack-dev-server --open",
...
...
},
–open:自动打开浏览器
// 导入html-webpack-plugin
const HtmlWebpackPlugin = require("html-webpack-plugin");
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html', // 指定模板文件
filename: 'index.html', // 输出文件名
inject: 'body' // 注入的位置
})
],
pnpm add vue -D
main.ts
import { createApp } from "vue";
import App from "./App.vue";
createApp(App).mount("#app");
<template>
<div>
test
div>
template>
<script setup lang=ts>
script>
<style scoped lang="scss" >
style>
vue.d.ts
文件,main.ts
中使用了import App from "./App.vue";
代码,在编译时TypeScript
不认识.vue
文件,在此声明.vue
文件的类型declare module "*.vue"{
import type {DefineComponent} from 'vue'
const component:DefineComponent<{},{},any>
export default component
}
.d.ts
文件是 TypeScript 定义文件的一种。在 TypeScript 中,.d.ts 文件用于提供类型定义,以便 TypeScript 编译器可以理解未包含类型信息的 JavaScript 代码或其他 TypeScript 模块的类型。在编译时TypeScript 编译器会在项目的根目录及其子目录中查找 .d.ts 文件。declare module
:用于声明一个模块的类型定义
此时pnpm build
打包时会报错:
ERROR in ./src/App.vue 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
>
|
| test
@ ./src/main.ts 2:0-28 4:10-13翻译:您可能需要一个适当的加载器来处理此文件类型,目前没有配置加载器来处理该文件。请参阅https://webpack.js.org/concepts#loaders
- 打包工具webpack不认识等代码,需要一个新的工具
vue-loader
8 安装vue-loader
vue-loader官网
- 安装
vue-loader
pnpm add vue-loader -D
- 在
webpack.config.js
中配置vue-loader
// 导入vue-loader const { VueLoaderPlugin } = require("vue-loader"); const config = { // 执行命令npm run build,按照config中的配置打包文件 ... module: { rules: [ // 以.vue结尾的文件,指定vue-loader加载器来处理 { test: /\.vue$/, loader: 'vue-loader' }, ] }, plugins: [ ... // 引入vue-loader插件 new VueLoaderPlugin(), ], }
作用:
vue Loader
是一个webpack
的loader
(加载器),它允许你以一种名为单文件组件 (SFCs)的格式撰写 Vue 组件
vue-loader
部分工作流程:
- 调用
@vue/compiler-sfc
会解析文件,提取每个语言块,- 通过标签中
lang="ts"
或lang="scss"
中lang的特性以及 webpack 配置中的规则自动推断出要使用的预处理(loader)vue-loader
调用ts-loader
预处理器,处理部分;调用
scss-loader
预处理器,处理部分
- 最后将他们组装成一个 ES Module,它的默认导出是一个 Vue.js 组件选项的对象。
Vue 单文件组件 (SFC) 规范:官网介绍
vue 文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue 文件包含三种类型的顶级语言块 、