【Vite】vite及webpack相关常见问题集合

1、sass :export

:export 是用于sass文件和js文件关联的,用此可以将sass中样式类似于es6语法中export导出,并在其他样式或者js文件中直接使用,但是 目前只适用于 webpack4 或者 node-sass v4.9及以上

 demo:

@/styles/common.scss

$primary:#ffffff;
$sideWidth: 100px;

:export {
  primary: $primary;
  sideWidth: $sideWidth;
}

 应用组件

<script>
    import common from  '@/styles/common.scss'
    export default{
        mounted() {
           console.log(common.sideWidth)
        }
    }
</script>
<style>
import '@/styles/common.scss';
.main{
   color: primary;
}
</style>

2、vue.config.js loaderOptions 的 prependData 和 additionalData

主要是用来配置全局变量的,用法大致都一样,只是对应sass-loader版本不同, v8以下用的是data,v8用的是prependData, v10及以上用的是additionalData目前一般安装最新的都是additionalData, 另外 在sass编译条件下@import不用加分号,scss编译条件下需要分号,注:scss语法也会在sass-loader下编译

demo:

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        additionalData: `@import "~@/assets/styles/common.sass"` // sass不需要加分号
      },
      scss: {
        additionalData: `@import "~@/assets/styles/common.scss";` // scss必须要加分号
      }
    }
  }
};

3、node-sass 安装失败

这种错误相信使用大家在改以前旧项目时经常遇到,很恼火,一般导致这问题的原因如下

1、没有配置npm镜像源,从国外访问太慢导致失败

解决方法:

npm config set registry https://registry.npm.taobao.org
set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ && npm install node-sass

2、 node 版本 和 node-sass 不兼容

以前很多老项目开始的时候,可能node版本才v10,一般的都v14,现在node 16都出来了,要是你们项目里package.json没有锁定依赖具体版本,那么就会全下载最新的,那肯定兼容报错

以下在我在node-sass github收集的 ,想去看的链接如下

https://github.com/sass/node-sass/releases

Node版本node-sass版本
12, 14, 16, 177.0.1
12, 14, 16, 177.0.0
12, 14, 15, 166.0.1
12, 14, 15, 166.0.0
10, 12, 14, 155.0.0
0.10, 0.12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 144.14.1
0.10, 0.12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 144.14.0
0.10, 0.12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 134.13.1
......

3、提示python啥的,然后安装失败

遇到这种问题,先别急,大概率就是node 版本 和 node-sass 不兼容,这时候先 uninstall node-sass,再将你的node_modules 移除掉,一般来说有错误日式也要一并删除掉,然后先对照我第二点,找到你对应的node-sass版本下载

总结一下:其实node-sass是导致vue项目安装出错最多的依赖,官方都不推荐了额,你在新建项目时,能选择dart-sass就选择dart-sass吧

4、sass-loader 安装报错

这依赖又跟上面node-sass版本紧密相关了,看吧 node-sass问题太多了,不过用了也没办法,总得解决一下,下面是部分 node-sass 与 sass-loader 关联版本

node-sasssass-loader
4.3.04.1.1
4.7.27.0.3 7.3.1
4.14.17.3.1
5.0.07.2.0
6.0.110.0.1

---持续更新---

5、command failed: pnpm install --reporter silent --shamefully-hoist 

出现此原因是在你vue create xxx 创建项目时时,默认使用pnpm,然后需要版本为6

npm i pnpm@6 -g

然后再

vue create xxx

6、目前打包器依赖及打包格式

sass(已升级到1.57.1)vite直接安装sass,webpack安装sass和dart-sass/node-sass;
vite(内置rollup,已升级到4);

rollup(升级到3)(官网:https://rollupjs.org/migration/);

/es(esmodule rollup使用)现代浏览器常用
/umd(通用模块化,包含amd,cjs 和 iife)现代浏览器常用
/cjs(CommonJS,同步,主要用于服务器端开发)(webpack使用)
/amd(RequireJS,异步,浏览器端开发)
/cmd(SeaJS,异步,浏览器端开发)

7、技术热点

vite4(官方文档还未出来) => rollup3
vite3 (需要 Node版本 14.18+, 16+.,yarn和npm的确不行,必须要指定node版本之上,但是pnpm可以不需要指定node版本,直接安装到最新的vite)=> rollup2

vite2(需要 Node版本 12.2.0 +)=> rollup2
Webpack 5 => Node.js v10.13.0+

8、vue2 + vite3解决方案

pnpm add vite@3.2.3 -D
pnpm add vite-plugin-vue2 -D
pnpm add vue-template-compiler@2.6.11 -D

想用jsx语法的话,需要安装依赖 @vue/babel-preset-jsx 此依赖用于vue2 + jsx

9、vue-loader各版本

v15.10.1
const VueLoaderPlugin  = require('vue-loader/lib/plugin')
v16及以上
const VueLoaderPlugin  = require('vue-loader/dist/plugin').default

10、webpack中sass-loader css-loader style-loader依赖作用

通过 sass-loader 把 SCSS 源码转换为 CSS 代码,再把 CSS 代码交给 css-loader 去处理。
css-loader 会找出 CSS 代码中的 @import 和 url() 这样的导入语句,告诉 Webpack 依赖这些资源。同时还支持 CSS Modules、压缩 CSS 等功能。处理完后再把结果交给 style-loader 去处理。
style-loader 会把 CSS 代码转换成字符串后,注入到 JavaScript 代码中去,通过 JavaScript 去给 DOM 增加样式。

11、vite 相关知识

Vite 将应用中的模块分为依赖和源码两类,分别进行服务器启动时间的优化。

11.1、 依赖模块,开发过程中基本不会变化:(强缓存)

Vite 对依赖采用了 esbuild 预构建的方式,全存在强缓存中,除非删除.vite文件或者执行vite dev --force
才会刷新依赖缓存,其次esbuild 使用 Go 编写,并且比以 JavaScript 编写的打包器预构建依赖快 10-100 倍;
解析过程:
import Vue from 'vue' 会转换成 import Vue from '/@modules/vue'
解析/@modules 会到包里面,将dist/vue.runtime.esm-bundler.js返回回来
源码模块,是用户自己开发的代码,会经常变动。(协商缓存)

11.2、 生产环境的构建为什么不直接使用 esbuild,而是使用 rollup 呢?

因为 esbuild 在代码分隔、css 处理等方面的功能仍在开发中,rollup 在应用打包方面更加的成熟且灵活

11.3、 依赖预构建的目的

开发阶段,Vite 的 Dev Server 将所有代码视为原生 ES 模块。因此,Vite 必须将 CommonJS 或 UMD 发布的依赖项转为 ESM
Vite 将有很多内部模块的依赖视为单个模块,浏览器只需要发起一个请求。

11.4、 webpack和vite对比

webpack:
需要将源码打包成Bundle给浏览器,有文件更新会重新打包,项目越大越慢,本身不支持
ts/jsx等
支持的模块规范:ES Modules,CommonJS 和 AMD Modules;
开发环境:通过 webpack-dev-server 托管打包好的模块;
生产环境:webpack
vite:
直接将源码转换成ES Modules文件给浏览器,有文件更新只会编译有更新的文件,
不管项目大小都很快,并且本身就只吃ts/jsx等
支持的模块规范:ES Modules;
开发环境:原生 ES Modules;
生产环境:Rollup

12、vue3 + element-plus cdn引入时,报‘createElementVNode‘ (imported as ‘_createElementVNode‘) was not found 错误

这种问题多数是在main文件中,先挂载了dom,再执行use(ElementPlus),正确顺序如下:

const app = createApp(App)
app.use(ElementPlus).mount('#app')

 当然index.html中cdn的包应该如下:

    <!-- 引入样式 -->
    <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
    <!-- 引入组件库 -->
    <script src="//unpkg.com/element-plus"></script>

13、vue3 + vite 运行报错 Cannot read properties of null (reading 'isCE')

这种情况多数源于vue版本不对,导致这个问题的原因就是 我们在vite打包里,一般使用rollup-plugin-external-globals 或者其他插件将vue不打入依赖代码库中,想使用cdn外链形式引入,但是你的package.json中 dependencies 中有vue依赖,导致外链cdn和依赖中都有vue,所以解决方式就是将依赖从生产依赖dependencies去除掉,可以加在开发依赖devDependencies中没问题。

那有童鞋想说:如何根据开发环境和生产环境来配置呢? 其实生产环境我们就需要减少依赖的使用,因为打包后会增加包的体积,所以生产环境基本使用cdn外链形式就可以,开发环境就将依赖写入devDependencies就行

14、Component is missing template or render function

出现这问题,一般就是两种可能

可能1:文件名后缀

ts = js > tsx = vue, 基本上来说就是逻辑文件优先于模板文件,在你省略后缀时将以这种优先级导入文件

可能2:文件内为空

比如你引入了vue文件,但是文件内没有代码,就会报这种错误,最简单解决方式就是加上下面几行,使文件不为空

<template>
    <div></div>
<template>

15、 @vitejs/plugin-vue与@vitejs/plugin-vue-jsx版本对照表

@vitejs/plugin-vue版本@vitejs/plugin-vue-jsx版本
2.0.01.0.0
2.1.01.1.0
2.2.01.2.0

------持续更新噢~------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值