T-SQL——批量刷新视图

目录
  • 0. 背景说明
  • 1. 查询出所有使用了指定表的视图并生成刷新语句
  • 2. 创建存储过程批量刷新
  • 3. 刷新全部的视图
  • 4. 参考

shanzm——2023年5月16日

0. 背景说明

为什么要刷新视图?

当修改了表结构,比如说添加了新字段,之前使用过该表的视图则不会展示新的字段。

即使视图中是使用*来获取该表的所有字段,视图也不会获取到表中新添加的字段。(当然也不建议视图中使用*)

简而言之:表结构的更改不会自动的反应到已创建的视图中

因此修改了表结构,需要对使用该表的视图进行刷新,两种方式如下:

  • 使用EXEC sp_refreshview 'V_XXX';对视图“V_XXX”进行刷新操作,

  • 基于原始创建视图的语句,进行ALTER操作(MSMS右键视图对象Alter到)

但是很多时候,并不能快速直接确定那些视图使用了某个表,所以需要查询出依赖该表的所有视图



1. 查询出所有使用了指定表的视图并生成刷新语句

脚本逻辑:使用内置的视图:sys.sql_dependencies

该视图可以查询对象的依赖关系,该系统视图支持2005~2016

也可以使用新的依赖查询视图:sys.sql_expression_dependencies(2008版本及之后)

注意这里个视图的作用差不多,但是字段名称不一样。

  1. 使用sys.sql_dependencies
SELECT DISTINCT
       'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects so
    INNER JOIN sys.sql_dependencies sd
        ON so.object_id = sd.object_id
WHERE type = 'V'
      AND sd.referenced_major_id = OBJECT_ID(N'tb');

  1. 使用sys.sql_expression_dependencies
--查询使用了表tbXXX的所有视图并生成刷新语句
SELECT DISTINCT
       'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects so
    INNER JOIN sys.sql_expression_dependencies sd
        ON so.object_id = sd.referencing_id
WHERE type = 'V'
      AND sd.referenced_id = OBJECT_ID(N'tbXXX');

结果格式如下,比如说这里有两个视图使用了tbXXX,则生成两条sql语句如下

EXEC sp_refreshview 'V_XXX1'
EXEC sp_refreshview 'V_XXX2'

注意:建议使用以上脚本生成刷新语句复制出来,手动执行刷新操作,这样可以明确自己执行的每一条sql语句



2. 创建存储过程批量刷新

脚本逻辑:使用内置视图查询依赖指定的表的所有视图,然后使用游标,将查询到的视图一条一条的执行刷新操作

-- =============================================
-- Author:		
-- Create date: 2023年5月16日
-- Description:	参数是表名,用于刷新使用了该表的所有视图
-- =============================================
CREATE PROCEDURE [dbo].[pro_RefreshView] @table_name NVARCHAR(200)
AS
BEGIN

    DECLARE MyCursor CURSOR FOR
    SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name
    FROM sys.sql_expression_dependencies AS sed
        INNER JOIN sys.objects AS o
            ON sed.referencing_id = o.object_id
    WHERE referenced_id = OBJECT_ID(N'' + @table_name + '')
          AND o.type_desc = 'VIEW';

    DECLARE @view_name VARCHAR(40);
    OPEN MyCursor;

    FETCH NEXT FROM MyCursor
    INTO @view_name;
    WHILE (@@fetch_status <> -1)
    BEGIN
        IF (@@fetch_status <> -2)
        BEGIN
            PRINT @view_name;--打印出操作的视图名称
            EXEC sp_refreshview @view_name;
        END;

        FETCH NEXT FROM MyCursor
        INTO @view_name;
    END;

    CLOSE MyCursor;
    DEALLOCATE MyCursor;
END;
GO

使用该存储过程对使用了表tbXXX的所有视图进行刷新

EXEC dbo.pro_RefreshView @table_name = N'tb' -- nvarchar(200)


3. 刷新全部的视图

脚本逻辑:与上述一样,使用系统内置的对象视图,查询出所有的视图多像,使用游标逐个进行刷新

DECLARE @ViewName VARCHAR(250);
DECLARE @i INT;
SET @i = 0;
DECLARE #_cursor CURSOR FOR SELECT name FROM sys.sysobjects WHERE type = 'V';

OPEN #_cursor;

FETCH NEXT FROM #_cursor
INTO @ViewName;

WHILE @@fetch_status = 0
BEGIN
    PRINT '成功刷新视图: ' + @ViewName;
    EXEC sp_refreshview @ViewName;
    SET @i = @i + 1;
    FETCH NEXT FROM #_cursor
    INTO @ViewName;
END;

CLOSE #_cursor;
DEALLOCATE #_cursor;
PRINT '完成';
PRINT '共成功刷新' + CONVERT(VARCHAR(10), @i) + '个视图';


4. 参考

  • 13. 查看数据库对象间的依赖关系

    • 该文详细的说明的sql server中的对象的依赖关系的查询
  • SQL Server 修改表结构后批量更新所有视图

  • 表结构改动后视图问题

作者:shanzm zhimingshan1@gmail.com 欢迎交流,欢迎指教!
本文转载于网络 如有侵权请联系删除

相关文章

  • 独立成分分析ICA系列2:概念、应用和估计原理.

    大家好,又见面了,我是你们的朋友全栈君。1.概念独立成分分析是从多元(多维)统计数据中寻找潜在因子或成分的一种方法.ICA与其它的方法重要的区别在于,它寻找满足统计独立和非高斯的成分。这里我们简要介绍ICA的基本概念、应用和估计原理。 1.1多元数据的线性表示 统计数据处理及相关领域中的一个重要和需要长期研究的问题就是,寻找多元数据一个恰当的表示,使得人们可以获得给定数据的本质特征或者使得数据的结构可视化。 在神经计算领域中,这个基本问题也就是非监督学习(unsupervisedlearning)问题,因为这种表示是从数据本身学习得来的,即给定某个数据集作为神经网络的输入,在没有导师的情况下,通过神经网络学习得到数据的本质特征.这种数据表示问题是数据挖掘、特征提取和信号处理的核心问题。 为了更为清楚的说明这个问题,假设我们已经获得了m维的观测数据集xi(t),其中{i=1,…,m及t=1,…,T,这里t表示观测样本点的个数,m和t的数目可以非常之大.我们可以提出这样一个问题:通过怎样的一个映射,使得m维数据空间变换到另一个n维数据空间,使得变换后的变量能够揭示观测数据的某些信息,而这

  • 深度学习在美团配送ETA预估中的探索与实践-笔记

    文章作者:Tyan 博客:noahsnail.com | CSDN | 简书本文为美团文章学习的笔记整理。1.背景ETA(EstimatedTimeofArrival,“预计送达时间”),即用户下单后,配送人员在多长时间内将外卖送达到用户手中。送达时间预测的结果,将会以”预计送达时间”的形式,展现在用户的客户端页面上,是配送系统中非常重要的参数,直接影响了用户的下单意愿、运力调度、骑手考核,进而影响用户和骑手体验,以及配送系统的整体效率。对于整个配送系统而言,ETA既是配送系统的入口和全局约束,又是系统的调节中枢。具体体现在:ETA在用户下单时刻就需要被展现,这个预估时长继而会贯穿整个订单生命周期,首先在用户侧给予准时性的承诺,接着被调度系统用作订单指派的依据及约束,而骑手则会参考ETA时间作为考核时间执行订单的配送。ETA作为系统的调节中枢,需要平衡用户-骑手-商家-配送效率。从用户的诉求出发,尽可能快和准时,从骑手的角度出发,ETA太短会增大其配送难度。从调度角度出发,太长或太短都会影响配送效率。而从商家角度出发,都希望订单被尽可能派发出去,因为这关系到商家的收入。外卖场景的ETA

  • 实战SSM_O2O商铺_25【商品类别】商品类别列表展示从Dao到View层的开发

    文章目录概述Dao层ProductCategoryDao接口ProductCategoryDaoMapper配置文件单元测试Service层ProductCategoryService接口ProductCategoryServiceImpl接口实现类单元测试Controller层泛型类Result状态信息ProductCategoryStateEnum控制类ProductCategoryControllerShopAdminController添加路由信息转发到页面单元测试View层productcategorymanage.htmlproductcategorymanage.jsproductcategorymanage.css运行测试Github地址概述进入owner拥有的店铺列表后,对某个店铺进行管理,其中类别管理模块的效果如上。所以获取商品类别的时候要传入shopId.通过前面的博客,我们对开发流程有了较为清晰的认识,这里我们将类别管理这部分的内容从下至上来实现下吧。Dao层ProductCategoryDao接口packagecom.artisan.o2o.dao; imp

  • python 爬取mm信息

    # -*- coding:utf-8 -*-   import requests from bs4 import BeautifulSoup import sys import re reload(sys) sys.setdefaultencoding('utf-8') for num in range(1,4300):     try:         URL = 'http://mm.taobao.com/json/request_top_list.htm?page=%d' % num         #print "现在爬取的网站url是:" + URL         response = requests.get(URL)          response.encoding = 'gb2312'         text = response.text          soup = BeautifulSoup(text, 'lxml')          for mod

  • 3天学会Jenkins_3_Jenkins Github&Gitlab集成之安装Git插件

    转载注明出处上一节已经安装并初始化完成Jenkins,接下来我们熟悉Jenkins的插件管理。Jenkins拥有出色的插件支持,官方网站上有数以千计的第三方应用程序插件。要了解Jenkins是否支持你想要的第三方应用程序,请访问https://plugins.jenkins.io/查询相关插件。在本节教程中,你将学到:如何在Jenkins中安装插件在Jenkins安装Git插件将Github与Jenkins集成1在Jenkins中安装插件为什么需要安装插件?Jenkins提供了一个非常基本的设置,因此你需要安装所需的插件以启用相应的第三方应用程序支持。GitHub是一个基于Web的代码存储库,在DevOps中起着重要作用。它为处理相同代码/项目的多个开发人员提供了一个通用平台,用于上传和检索更新的代码,从而促进持续集成。Jenkins需要安装GitHub插件才能从GitHub存储库中拉取代码。在Jenkins安装初始化设置期间,如果你已经安装了Git插件(即选择了Installsuggestedplugins),则无需安装GitHub插件。但如果没有,下面就是教你如何在Jenkins中

  • TDD和FDD,区别到底在哪?

    大家都知道,LTE通常分为FDDLTE和TDDLTE。提起TDD,稍微懂一点通信的同学,一定会想到中国移动。是的,一直以来,中国移动就是TD/TDD的代名词。因为从3G时代开始,中国移动就沾上了TD,使用的是TD-SCDMA这个通信标准。到了4G时代,中国移动可以说是“命里带T”,被工信部“光荣”授予了TDDLTE牌照。而中国联通和中国电信,3G时代分别用的WCDMA和CDMA2000技术,到了4G时代,携手走向FDDLTE(虽然名义上也有TDD)。那么,问题来了,为什么大家提到TD的时候,总有谈虎色变、一脸嫌弃?为什么中国移动搞TD-SCDMA和TDDLTE,总是让人觉得掉进大坑?难道TDD就是不如FDD吗?它们之间,到底有什么区别呢?今天,小枣君就给大家解释一下这个问题。FDD和TDD,分别是什么?其实,FDD和TDD,从本身字面上来说,只是代表了两种不同的双工方式:TDD,时分双工(TimeDivisionDuplexing)FDD,频分双工(FrequencyDivisionDuplexing)什么叫“双工”?我和你通信,像广播一样,只能我说你听,是单工;像对讲机一样,同一时间

  • 子域名监控概况+思路+监测源码与环境搭建

    子域名监控域名监控概括子域名收集这个路子真的是被玩烂了,花样百出、工具没有八百也有一千,无非是爆破、爬、调用搜索引擎之类,有资源的大厂有自己的dns库,但是这些在我眼里真的都很low。为什么说很low,因为在职业刷src或者apt攻击者的角度,单单过一遍爆破的域名是不能满足持续性漏洞挖掘的;从职业刷src的角度,过一遍收集的子域名,已经发现了所有漏洞并已经提交后修复,或者用当前漏洞测试方法并没发现有漏洞,这样业务是安全的,但这个安全是在当下时间的,企业要发展、要解决当前问题,就会出新业务不断的pull代码更新旧问题,这就是业务的变化,通过持续性监控子域名就会发现业务的变化,最快速度的发现变化,对变化进行安全测试、漏洞挖掘。有经验的刷src的同学都知道,新业务发现漏洞概率都很高。懒惰使人创造工具,而我就拥有这么一个工具,从14年搞的子域名爆破工具(送给过一个小姐姐,刷了好多漏,如今以身为人妻,而我还没有女朋友。),到如今的子域名监控工具。具体实现思路1、通过域名爆破、搜索引擎之类方法,获得子域名后爬取子域名http响应数据保存入数据库。 2、设定时间、可以是一分钟、一小时、一天一次循环读

  • angular之interceptors拦截器

    <!DOCTYPEhtml> <htmlng-app="nickApp"> <head> <metacharset="UTF-8"> <metaname="viewport"content="initial-scale=1,maximum-scale=1,user-scalable=no,width=device-width"> <title>interceptors</title> <scriptsrc="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> <script> /* $httpservice在Angular中用于简化与后台的交互过程,其本质上使用XMLHttpRequest或JSONP进行与后台的数据交互。 在与后台的交互过程中,可能会对每条请求发送到Server之前

  • 我在工作中的常用代码管理

    说是管理其实就是把常用的一些JS方法,自己保存下来,这样的以后的工作中可以比较方便的使用。哪些方法可以、或是说值得保存呢?(偏见啊)我自己的主观看法就是一些功能性的,不怎么带逻辑的函数,或是一些常用的方法封装。例如,倒计时,封装ajax的get\post方法,浏览器版本判断,邮箱、手机、输入框之类的正则,这些都算是功能性的。还有一些是扩展型的函数,例如,判断数组,增加、删除数组什么的,还有一些工具类的,什么复制属性啊,字数判断啊,DOM节点操作啊,轮播广告啊,日期操作总之,上面列出的那些内容的JS代码都是与具体业务逻辑无关的,也就是说它们在任何项目中都可以用到。那完全可以把它们保存下来,用的时候直接拿过来改改就OK了,而不必每次都重复写它。当然我这个话是从效率的角度来说的啊。保存的方式方法嘛,一是按用途保存,组件类,工具类,二是按方法名保存,a...,b...,c...三是按项目保存,x项目,x2项目。。四是有时间就在网上搞个目录,这样以后自己也好根据需要查找。这里的关键是命名,要有自己的命名规则。这个规则不是JS的方法、函数的名字,而是你自己保存这些JS文件时的目录名啊,zip包名什

  • JAVA根据集合中属性判断是否包含元素

    booleanisContain=list.stream().anyMatch(item->item.getKey().equals(key)); 复制

  • [uboot] (第四章)uboot流程——uboot编译流程

    http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以projectX项目tiny210(s5pv210平台,armv7架构)为例 [uboot]uboot流程系列: [projectX]tiny210(s5pv210)上电启动流程(BL0-BL2) [projectX]tiny210(s5pv210)从存储设备加载代码到DDR [uboot](第一章)uboot流程——概述 [uboot](第二章)uboot流程——uboot-spl编译流程 [uboot](第三章)uboot流程——uboot-spl代码流程 [uboot](第四章)uboot流程——uboot编译流程 [uboot](番外篇)global_data介绍 [uboot](番外篇)ubootrelocation介绍 建议先看《[projectX]tiny210(s5pv210)上电启动流程(BL0-BL2)》,根据例子了解一下上电之后的BL0\BL1\BL2阶段,以及各

  • IE浏览器跟火狐浏览器兼容写法3

    HACK设置 仅IE7识别 *+html {…} 当面临需要只针对IE7做样式的时候就可以采用这个HACK。 IE6及IE6以下识别 *html {…} 这个地方要特别注意很多地主都写了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。 html/**/>body select{……}网页教学网 这句与上一句的作用相同。 仅IE6不识别 select{display/*IE6不识别*/:none;} 这里主要是通过CSS注释分开一个属性与值,流释在冒号前。 仅IE6与IE5不识别 select/**/{display/*IE6,IE5不识别*/:none;} 这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。 仅IE5不识别 select/*IE5不识别*/{display:none;} 这一句是在上一句中去掉了属性区的注释。只有IE5不识别 盒模型解决方法 selct{width:IE5.x宽度;voice-family:""}"";

  • Max answer(单调栈+ST表)

    Maxanswer  https://nanti.jisuanke.com/t/38228 Alicehasamagicarray.Shesuggeststhatthevalueofaintervalisequaltothesumofthevaluesintheinterval,multipliedbythesmallestvalueintheinterval. Nowsheisplanningtofindthemaxvalueoftheintervalsinherarray.Canyouhelpher? Input Firstlinecontainsaninteger n(1\len\le5\times10^5n(1≤n≤5×105). Secondlinecontains nn integersrepresentthearray a(-10^5\lea_i\le10^5)a(−105≤ai​≤105). Output Onelinecontainsanintegerrepresenttheanswerofthearray.

  • SD-WAN connectivity architecture with Azure Virtual WAN

    Azure虚拟WAN是一种网络服务,它将许多云连接和安全服务与单个操作界面结合在一起。这些服务包括分支(通过站点到站点V-P-N)、远程用户(点到站点V-P-N)、专用(ExpressRoute)连接、VNet的云内传递连接、V-P-N和ExpressRoute互连、路由、Azure防火墙和用于私人连接的加密。尽管Azure虚拟广域网是一种基于云的SD-WAN,可提供丰富的Azure第一方连接、路由和安全服务套件,但Azure虚拟广域网还旨在实现与基于本地的SD-WAN和SASE技术的无缝互连和服务。许多此类服务由我们的虚拟WAN生态系统和Azure网络托管服务合作伙伴(MSP)提供。将私有WAN转换为SD-WAN的企业在将私有SD-WAN与Azure虚拟WAN互连时可以选择。企业可以从以下选项中进行选择: DirectInterconnectmodel DirectInterconnectmodelwithNVA-in-VWAN-hub IndirectInterconnectmodel ManagedHybridWANmodelusingtheirfavoritemanageds

  • struts2命令执行漏洞

    一、目的: 首先发现了带有".do"和“.action”的页面 用struts2搭建的网站而且页面上存在“.do”和“.action”的,可能会存在远程命令执行漏洞, 用awvs扫描是否存在这个漏洞,如果扫描出来有的话,就用工具去验证这个漏洞是否真的存在 二、实验 1、开启虚拟机 2、这个就是我发现的用struts2搭建的带有“.action”的页面,开始操作    3、用awvs扫描           4、验证 证明这个网站上存在远程执行命令漏洞 例如:S2-057漏洞验证过程(以下是粗略过程) 详细请参考:https://blog.csdn.net/weixin_43625577/article/details/97111575     <constantname="struts.mapper.alwaysSelectFullNamespace"value="true"/>            &nb

  • 如何成为一名程序员

    如何成为一名俣序员 为什么会有这篇文档? 之前有幸量EricRaymond(埃里克史蒂文雷蒙德)与的一 篇文章《如何成为一名黑客》,感觉像黑夜里的灯塔一样,能够人很多的启迪在计算 机这条道路上,无论是程序员,黑客网管,还是其他任回相关的角色,有一个老司机带你, 能让亻亇看、胄自己的方向,不至于迷失自我。记得在初二那一耸因为老师的一旬很看不起 人的话,违上了编程这条路。高中,大学,不断的更换自己所学的语言这期间我学习了VB,Java,Perl,Python,C#,C,C十十,汇编原因就是因为自己不知道该学什么好,究竟应该学什么才 是对的,怎么样才能更好的在编程这条路迮的更远我学习VB的时 候看到别人说丿ava如何的厉害,学丿ava的 时候又听别人说丿ava不能做大型游戏和作系统·那一刻我是真 的迷茫了。这是我下定决定要与这篇手记的初衷,我不奢望它能成为像《如何成为一名黑客 》这样被人称为黑客入门宝典的文章只精望能让看到这篇手记的你,不冉迷茫。什么是裎序 员?程序员在外行人看来,可能是一个带着厚镜片眼睛,满脸的胡茬,大T恤,人字拖双眼无光,整天坐在电脑前擗里湘啦的敲代码,凡是电脑 相关的问

  • ArrayList 源码分析

    目录ArrayList源码分析1.数组介绍2.ArrayList源码分析构造方法插入数据扩容操作删除方法遍历 ArrayList源码分析 1.数组介绍 数组是数据结构中很基本的结构,很多编程语言都内置数组。 在Java中当创建数组时会在内存中划分一块连续的内存,然后当有数据进入的时候会将数据按顺序的存储在这块连续的内存中。当需要读取数组中的数据时,需要提供数组中的索引,然后数组根据索引将内存中的数据取出来,返回给读取程序。在Java中并不是所有的数据都能存储到数组中,只有相同类型的数据才可以一起存储到数组中。 注意: 因为数组在存储数据时是按顺序存储的,存储数据的内存也是连续的,所以它的特点就是寻址读取数据比较容易(直接通过下标读取),插入和删除比较困难(需要移动元素)。 2.ArrayList源码分析 alt+7:查看一个类中的所有方法 构造方法 //指定长度 publicArrayList(intinitialCapacity){ if(initialCapacity>0){ //创建指定长度的Object数组 this.elementData=newObject[initi

  • 我的周记19——“自信人生二百年”

    恰同学少年,风华正茂   这周在看电视剧——《恰同学少年》,这真的是难得的一部好剧,唯一遗憾的是没有在更加年少的时候看到它。 这部剧讲的是我们国家伟大领导人的少年,从19岁以第一名考进湖南第一师范到毕业的这段历史。 精彩,特别精彩,原来主席是这样一步一步成长起来的,写下看了前10集的感受: 1、勤于思考,勤奋好学 2、多读书,不动笔墨不读书 3、知错能改,实事求是,知行合一 4、乐观派,有着睥睨天下的气度与自信 5、执行力强,认准的事一条路走到黑   7/21 今天把《恰同学少年》看完,心里久久不能平息, 一直在想,这应该是全世界最好的5年读书时光了,里面有志同道合的同学,有亲如父子的老师,有一群可爱的人,为了新中国努力地做好准备,在湘江边,橘子洲头,留下你们最美的身影 问苍茫大地,谁主沉浮! 是你们,向你们的自信和阳光致敬,正因为有你们,这盛世,如愿以偿。   综上所述,这部剧给我带来的教育 1、不要有虚荣心,不要攀比。对比早些年部份女大学生的裸货的现象,若是能知道这点,也许就不会出现那么多悲剧 2、文明其精神,野蛮其体魄。思想重要,身体也很重

  • Jquery的parent和parents(找到某一特定的祖先元素)用法

    [html] viewplain copy   <!--   parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合。   parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。      parent取得很明确就是当前元素的父元素   parents则是当前元素的祖先元素   -->   <html>       <head></head>       <body>           <div id="div1">   &

  • iOS最新Mac OS X 10.11之后 安装cocoapods及使用详解

    iOS最新版CocoaPods的安装流程 一、安装方法: 1、移除现有Ruby默认源 gemsources--removehttps://rubygems.org/ 为了提高安装的成功几率,大家可以多移除几个源。 gemsources--removehttps://rubygems.org/ gemsources--removehttp://ruby.taobao.org/ gemsources--removehttps://ruby.taobao.org/  gemsources--removehttps://gems.ruby-china.org/宁可错杀一千,绝不放过一个 2、使用新的源 gemsources-ahttps://gems.ruby-china.org/ 3、验证新源是否替换成功 gemsources-l 4、设置gem为最新版本 sudogemupdate--system 如果失败,报错如下,请重新安装ruby  目前最新版本:     RROR: Whileexecutinggem...(E

  • Vue - 组件化开发

    零:单文件组件 1.简介 在很多Vue项目中,我们使用Vue.component来定义全局组件,紧接着用newVue({el:'#container'})在每个页面内指定一个容器元素 这种方式在很多中小规模的项目中运作的很好,在这些项目里JavaScript只被用来加强特定的视图 但当在更复杂的项目中,或者你的前端完全由JavaScript驱动的时候,下面这些缺点将变得非常明显: 全局定义(Globaldefinitions)强制要求每个component中的命名不得重复 字符串模板(Stringtemplates)缺乏语法高亮,在HTML有多行的时候,需要用到丑陋的\ 不支持CSS(NoCSSsupport)意味着当HTML和JavaScript组件化时,CSS明显被遗漏 没有构建步骤(Nobuildstep)限制只能使用HTML和ES5JavaScript,而不能使用预处理器,如Pug(formerlyJade)和Babel 2.Hello.vue的简单实例: 现在我们获得: 完整语法高亮 CommonJS模块 组件作用域的CSS 正如我们说过的,我们可以使用预处理器来构

相关推荐

推荐阅读