详解vue-cli 构建Vue项目遇到的坑

yizhihongxing

详解vue-cli 构建Vue项目遇到的坑

简介

vue-cli是Vue.js官方提供的一款构建工具,可以快速创建单页应用或组件库,提供webpack打包、ES6转译、热更新等功能,可以大大减轻开发者的工作量。然而,使用vue-cli创建项目时,也会遇到各种坑,这里将对一些常见的问题进行详解。

坑1:vue-cli3无法预览组件库

使用vue-cli3创建组件库时,如果直接运行npm run serve,会发现组件库无法预览,只有空白的页面。这是由于vue-cli3默认只打包了应用程序入口文件,而组件库主要提供的是组件,所以需要修改webpack的配置。

首先,安装vue-cli-service插件:

npm install @vue/cli-service --save-dev

然后,在package.json文件中,添加如下内容:

{
  "main": "dist/index.js",
  "files": [
    "dist"
  ],
  "scripts": {
    "build": "vue-cli-service build --target lib --name my-lib src/main.js",
    "serve": "vue-cli-service serve --open"
  },
  "peerDependencies": {
    "vue": "^2.5.0"
  }
}

修改webpack的配置,使其能够直接预览组件库:

module.exports = {
  configureWebpack: {
    output: {
      libraryExport: 'default'
    },
    externals: {
      vue: 'vue',
      'element-ui': 'element-ui',
      'vant': 'vant'
    },
    plugins: [
      new VueLoaderPlugin()
    ]
  },
  css: {
    extract: false
  }
}

最后运行npm run serve即可预览组件库。

坑2:Vue组件中的CSS不起作用

在Vue组件中,由于CSS样式是使用scoped修饰符包裹的,因此有时候会发现组件中的CSS样式不起作用。这是由于系统主题覆盖了组件中的CSS,需要使用/deep/或>>>修饰符才能使CSS样式生效。

例如,在以下组件中,按钮的样式无法生效:

<template>
  <div>
    <button class="my-button">按钮</button>
  </div>
</template>

<style>
  .my-button {
    background-color: red;
    color: #fff;
  }
</style>

需要在样式中使用/deep/或>>>修饰符才能生效:

<template>
  <div>
    <button class="my-button">按钮</button>
  </div>
</template>

<style scoped>
  /deep/ .my-button {
    background-color: red;
    color: #fff;
  }
</style>

示例说明

示例1:创建Vue项目时,无法安装依赖包

当使用vue-cli创建Vue项目时,有时候会出现安装依赖包失败的情况,例如:

npm WARN deprecated bfj-node4@5.3.1: Switch to the `bfj` package for fixes and new features!
npm ERR! cb() never called!

npm ERR! This is an error with npm itself. Please report this error at:
npm ERR!     <https://npm.community>
npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/qiushuangying/.npm/_logs/2018-08-08T07_40_05_173Z-debug.log

这是由于npm的版本不兼容造成的,解决方法是升级npm的版本:

npm install npm@latest -g

然后再重新创建项目即可。

示例2:引入第三方组件库后,页面样式错乱

当使用第三方组件库,例如Element-UI、Vant等,引入页面后,有时候会发现原本正常的页面样式变得错乱。

这是由于第三方组件库的样式与当前系统主题不兼容,需要在main.js文件中修改全局样式:

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

import './assets/my-styles.css'

Vue.config.productionTip = false

new Vue({
  render: h => h(App)
}).$mount('#app')

在my-styles.css文件中,可以覆盖第三方组件库的样式,例如:

.el-button {
  color: #fff;
  background-color: #409EFF;
  border-color: #409EFF;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue-cli 构建Vue项目遇到的坑 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue-router的使用和出现空白页,路由对象属性详解

    Vue-router是Vue.js官方的路由管理器,可以快速地搭建单页面应用程序(SPA),并提供了丰富的导航解决方案。 Vue-router的使用 1. 安装和引入 安装Vue-router可以使用npm或yarn,在项目目录下运行以下命令: npm install vue-router 安装完成后,在项目中引入Vue-router: import Vue…

    Vue 2023年5月28日
    00
  • Vue之监听方法案例详解

    那么接下来我来详细讲解“Vue之监听方法案例详解”的完整攻略,包含以下几个方面的内容: 什么是监听方法 在Vue中,监听方法指的是在Vue实例中,通过使用watch属性或$watch方法来监测某些值的变化。当监测到这些值发生变化时,可以执行一些指定的操作。 何时使用监听方法 在开发过程中,经常需要实时监测某些变量或属性的值的变化,来做出对应的响应。比如,当数…

    Vue 2023年5月28日
    00
  • Vue.js在数组中插入重复数据的实现代码

    在Vue.js中,要向数组中插入数据需要使用Vue.set或者.splice方法,而如果需要插入重复数据,可通过以下实现代码: // 定义一个空数组 let arr = []; // 添加第一个元素 arr.push(1); // 添加第二个元素,即重复元素 Vue.set(arr, 1, 1); 上述代码中,我们首先定义了一个空数组arr,并向其中添加了一…

    Vue 2023年5月29日
    00
  • 微信小程序:报错(in promise) MiniProgramError

    微信小程序是一种轻量级的应用程序,它可以在微信上快速运行,但在开发小程序的过程中会遇到各种问题,其中之一就是“报错(in promise) MiniProgramError”错误。以下是解决此错误的完整攻略: 1. 查看报错信息 当小程序出现“报错(in promise) MiniProgramError”错误时,首先应该查看报错信息,找到代码中的错误。可以…

    Vue 2023年5月28日
    00
  • Vue中Vue.use()的原理及基本使用

    Vue.use() 是 Vue.js 用来注册插件的一种机制,可以将其理解为安装插件的过程。它接收一个插件或者一个包含多个插件的对象作为参数,通过调用其中的 install 方法注册插件。 Vue.use() 原理如下: 插件必须提供一个具名的 install 方法。 插件可以是一个对象,也可以是一个函数。 当插件被注册时,将其 install 方法挂载到 …

    Vue 2023年5月27日
    00
  • vue如何自定义配置运行run命令

    要自定义配置Vue的run命令,需要在项目根目录中创建一个vue.config.js文件,并在该文件中向导出的配置对象的devServer属性下添加相应的配置,例如: // vue.config.js module.exports = { devServer: { port: 8080, open: true, proxy: { ‘/api’: { targ…

    Vue 2023年5月27日
    00
  • Vue组件之Tooltip的示例代码

    下面我将详细讲解“Vue组件之Tooltip的示例代码”的完整攻略,如下: 简介 Tooltip 是一个常用的 UI 组件,它可以在鼠标移入某个元素时展示一段提示信息,通常用于解释该元素的用途或者展示该元素的状态。在 Vue 中,可以通过自定义指令或者组件的方式来实现 Tooltip。 组件实现步骤 1. 安装插件 首先,我们需要安装一个 Tooltip 插…

    Vue 2023年5月27日
    00
  • 一步步从Vue3.x源码上理解ref和reactive的区别

    当我们在使用Vue3.x的时候,ref和reactive这两个API很常用,但是也经常容易搞混。这篇攻略将介绍ref和 reactive的区别,并且通过源码分析来更加深刻理解这两者之间的差异。 1. reactive reactive是用于将对象转为响应式的API。我们一般使用这个API来将普通的对象转成可以响应式地监听的对象。使用方法如下所示: impor…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部