Vue10--webpack

了解Webpack作为JavaScript应用的静态模块打包工具的角色,掌握CommonJS、AMD、CMD和ES6 Modules规范的转换,熟悉Webpack、Node和NPM的关系,学会基本的全局和局部安装,配置webpack.config.js,以及使用npm run命令自动化构建。

webpack:

是一个现在的JavaScript应用的静态模块-打包工具
模块的规范化,常见的规范化有CommonJS、AMD、CMD和ES6的Modules
浏览器只支持ES6的Modules模规范化,webpack则可以CommonJS、AMD、CMD打包成浏览器支持的模块规范化

webpack 、node、 npm 关系

webpack正常运行必须依赖node运行环境;
node为了可以正常运行很多代码,其中必须包含各种依赖包;
npm工具(node packages manager) 来管理各种包(在安装node会自动安装npm)
webpack 全局安装
cmd下

npm install webpack@版本号 -g(全局)

查看版本:

webpack -v

## 目录文件
dist:打包后的文件
src:开发时的文件
webpack 打包:
将main.js 打包到dist下成为bundle.js文件

webpack ./src/main.js ./dist/bundle.js

改进上面的命令行,直接webpack打包即可
固定文件名
webpack.config.js:

module.exports={
    entry:'./src/main.js',   // 入口
    output:{
        path:'./dist',    // 出口路径
        filename:'bundle.js',  // 文件名
    }
}

报错 The provided value “./dist” is not an absolute path!
导入node中的path模块获取项目的绝对路径
1、const path=require(‘path’)–需要用到node东西
npm init 来初始化
生成package.json文件
当pacgage中存在依赖 -----npm install 加载
path.resolve(__dirname,‘dist’) :获取项目绝对路径并且拼接

const path=require('path')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js',
    }
}

npm run 命令参数

package.json文件:

scrpits:执行的脚本配置—首先会去本都node-modules/bin下面去查找,当本地没有是才去全局环境下查找
配置build:‘webpack’
执行 npm run build------去执行webpack,其会首先从本地项目去找webpack,当本地项目(局部)没有时再去找全局的webpack,一般都会先安装局部webpck,因为你的同事webpack版本有可能和你不一致,通过安装局部webpack来保持一致

安装剧本webpack
npm install webpack@版本 --save-dev(开发时依赖)

{
  "name": "test1-1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build":"webpack"
  },
  "author": "",
  "license": "ISC"
}
PS D:\code\pingan_fk> npm list vue-loader webpack vue-template-compiler pingan_fk@1.0.0 D:\code\pingan_fk +-- @vue/cli-plugin-babel@5.0.9 | +-- babel-loader@8.4.1 | | `-- webpack@5.76.0 deduped | +-- thread-loader@3.0.4 | | `-- webpack@5.76.0 deduped | `-- webpack@5.76.0 deduped +-- @vue/cli-plugin-eslint@5.0.9 | +-- eslint-webpack-plugin@3.2.0 | | `-- webpack@5.76.0 deduped | `-- webpack@5.76.0 deduped +-- @vue/cli-service@5.0.9 | +-- @soda/friendly-errors-webpack-plugin@1.8.1 | | `-- webpack@5.76.0 deduped | +-- @vue/vue-loader-v15@npm:vue-loader@15.11.1 | | `-- webpack@5.76.0 deduped | +-- copy-webpack-plugin@9.1.0 | | `-- webpack@5.76.0 deduped | +-- css-loader@6.11.0 | | `-- webpack@5.76.0 deduped | +-- css-minimizer-webpack-plugin@3.4.1 | | `-- webpack@5.76.0 deduped | +-- html-webpack-plugin@5.6.4 | | `-- webpack@5.76.0 deduped | +-- mini-css-extract-plugin@2.9.4 | | `-- webpack@5.76.0 deduped | +-- postcss-loader@6.2.1 | | `-- webpack@5.76.0 deduped | +-- progress-webpack-plugin@1.0.16 | | `-- webpack@5.76.0 deduped | +-- terser-webpack-plugin@5.3.14 | | `-- webpack@5.76.0 deduped | +-- vue-loader@17.4.2 | | `-- webpack@5.76.0 deduped | +-- vue-template-compiler@2.7.16 deduped | +-- webpack-dev-server@4.15.2 | | +-- webpack-dev-middleware@5.3.4 | | | `-- webpack@5.76.0 deduped | | `-- webpack@5.76.0 deduped | `-- webpack@5.76.0 deduped +-- css-loader@3.6.0 | `-- webpack@5.76.0 deduped +-- vue-loader@16.8.3 | `-- webpack@5.76.0 deduped +-- vue-template-compiler@2.7.16 `-- webpack@5.76.0 正确了吗
最新发布
09-09
<think> 根据用户提供的 `npm list vue-loader webpack vue-template-compiler` 输出结果,分析项目依赖配置问题并修复: ### 问题诊断 输出结果关键信息: ``` +-- @vue/cli-service@5.0.9 | | +-- @vue/vue-loader-v15@npm:vue-loader@15.11.1 [冲突点1] | | `-- vue-loader@17.4.2 [冲突点2] +-- css-loader@3.6.0 [过时依赖] `-- webpack@5.76.0 ``` 1. **版本冲突**: - 同时存在 `vue-loader@15.11.1`(通过别名 `@vue/vue-loader-v15` 安装)和 `vue-loader@17.4.2` - `vue-loader` v15 专为 Vue 2 设计,v17 专为 Vue 3 设计[^2] 2. **CSS加载器版本过低**: - `css-loader@3.6.0` 与 Webpack 5 不兼容(需 v5+)[^3] 3. **缺少编译器**: - 输出中未出现 `vue-template-compiler`(Vue 2必需)或 `@vue/compiler-sfc`(Vue 3必需)[^4] ### 解决方案 #### 步骤1:确定Vue版本 ```bash # 查看package.json中的Vue版本 cat package.json | grep '"vue"' ``` - 若为 `"vue": "^2.x.x"` → 需用 `vue-loader@16` - 若为 `"vue": "^3.x.x"` → 需用 `vue-loader@17` #### 步骤2:统一依赖(以Vue 2项目为例) ```bash # 移除冲突的vue-loader版本 npm uninstall vue-loader @vue/vue-loader-v15 # 安装正确版本(Vue 2) npm install vue-loader@16.8.3 --save-dev npm install vue-template-compiler@2.6.14 --save-dev # 版本必须与vue一致 # 更新css-loader(Webpack 5要求) npm install css-loader@5.2.7 --save-dev ``` #### 步骤3:修改Webpack配置 ```js title="vue.config.js" const { VueLoaderPlugin } = require('vue-loader') module.exports = { configureWebpack: { module: { rules: [ { test: /\.vue$/, loader: 'vue-loader' } ] }, plugins: [ new VueLoaderPlugin() // 必须启用[^2] ], resolve: { alias: { // Vue 2 必需添加 'vue$': 'vue/dist/vue.esm.js' } } } } ``` ### 验证修复 1. **依赖树检查**: ```bash npm list vue-loader webpack vue-template-compiler ``` 正确输出应类似: ``` pingan_fk@1.0.0 ├── vue-loader@16.8.3 ├── vue-template-compiler@2.6.14 └── webpack@5.76.0 ``` 2. **运行测试**: ```bash npm run serve ``` ### 常见错误规避 - **`Cannot read property 'vue' of undefined`** [^4] 原因:未启用 `VueLoaderPlugin` 或 vue-loader 版本错误 - **组件渲染失败** 原因:Vue 2 项目缺少别名配置 `vue$: 'vue/dist/vue.esm.js'` - **样式加载异常** 原因:`css-loader` 版本需升级至 v5+ > **关键原则**: > - Vue 2:`vue-loader@16` + `vue-template-compiler`(版本严格匹配vue) > - Vue 3:`vue-loader@17` + `@vue/compiler-sfc` > - Webpack 5:`css-loader` >=5.0.0, `style-loader` >=2.0.0 §§相关问题§§ 1. 如何检查项目中安装的 Vue 具体版本号? 2. Webpack 5 下 `css-loader` 和 `style-loader` 应该使用什么版本? 3. Vue 2 项目迁移到 Vue 3 需要修改哪些关键依赖? </think> ### 分析依赖配置问题及解决方案 #### 依赖诊断(基于 `npm list` 输出) 1. **版本冲突**: - 检测到 `vue-loader` 存在两个版本: - `@vue/vue-loader-v15@npm:vue-loader@15.11.1`(通过 `@vue/cli-service` 间接安装) - `vue-loader@17.4.2`(直接依赖) - **问题**:v15 和 v17 不兼容,v15 仅支持 Webpack 4,v17 需要 Webpack 5[^4] 2. **编译器缺失**: - 输出中未出现 `vue-template-compiler`(Vue 2 必需)或 `@vue/compiler-sfc`(Vue 3 必需) - **问题**:缺少模板编译能力会导致 `.vue` 文件解析失败[^2] 3. **Webpack 版本**: - 统一使用 `webpack@5.76.0`(符合 vue-loader v17 要求) #### 修复方案(分 Vue 2/Vue 3 场景) ##### 🔧 Vue 2 项目配置 ```bash # 移除冲突依赖 npm uninstall vue-loader @vue/vue-loader-v15 # 安装兼容组合(Vue 2) npm install vue-loader@16.8.3 vue-template-compiler@2.6.14 css-loader@5 style-loader@2 --save-dev ``` ##### 🔧 Vue 3 项目配置 ```bash # 移除冲突依赖 npm uninstall vue-loader @vue/vue-loader-v15 # 安装兼容组合(Vue 3) npm install vue-loader@17.4.2 @vue/compiler-sfc@3.2.47 css-loader@6 style-loader@3 --save-dev ``` #### 关键配置验证 1. **版本匹配检查**: ```bash # Vue 2 项目应输出 vue-loader@16.8.3 vue-template-compiler@2.6.14 # 必须与 vue 主版本一致 webpack@5.76.0 # Vue 3 项目应输出 vue-loader@17.4.2 @vue/compiler-sfc@3.2.47 # 必须与 vue 主版本一致 webpack@5.76.0 ``` 2. **Webpack 配置要点**: ```js title="webpack.config.js" const { VueLoaderPlugin } = require('vue-loader'); module.exports = { module: { rules: [ { test: /\.vue$/, loader: 'vue-loader' }, { test: /\.css$/, use: ['style-loader', 'css-loader'] // Vue 2 用 style-loader@2 } ] }, plugins: [new VueLoaderPlugin()] // 必须添加[^1] }; ``` 3. **版本兼容矩阵**: | 依赖 | Vue 2 兼容版本 | Vue 3 兼容版本 | |------------------|----------------------|----------------------| | `vue-loader` | 16.x (最高 16.8.3) | 17.x (≥17.0.0) | | 编译器 | `vue-template-compiler` | `@vue/compiler-sfc` | | `css-loader` | 5.x | 6.x | | `style-loader` | 2.x | 3.x | #### 验证步骤 1. 运行依赖树检查: ```bash npm list vue-loader webpack vue-template-compiler @vue/compiler-sfc ``` 2. 创建测试文件: ```vue title="src/App.vue" <template> <div>Vue Loader Test {{ version }}</div> </template> <script> export default { data: () => ({ version: process.env.VUE_VERSION }) } </script> ``` 3. 执行构建: ```bash npx webpack --mode development ``` > ⚠️ **错误规避**:若遇到 `Cannot read property 'vue' of undefined`,表明: > 1. 未启用 `VueLoaderPlugin` [^4] > 2. `vue-loader` 与 Webpack 版本不匹配 > 3. Vue 2 项目未配置别名 `'vue$': 'vue/dist/vue.esm.js'`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值