ts-loader如何与vue单文件组件衔接
.ts-loader是如何与vue单文件组件衔接作用的
https://github.com/microsoft/TypeScript-Vue-Starter
https://www.npmjs.com/package/ts-loader
从文档上可以看到,需要安装 typescript 和 ts-loader这两个依赖
ts-loader是如何处理.vue单文件组件的,
在rule的配置里,ts-loader的test是以.ts文件结尾的啊,下面研究下
———————————————————————————————
首先再来回忆一下vue-loader+VueLoaderPlugin的处理过程:
vueloaderplugin在webpack初始化的阶段,
vueloaderplugin扩展了开发者module.rule的配置,加入了vue-loader内部提供的pitcher-loader(即:pitcher这个rule,它的use是pitcher-loader),
(pitcher的resourceQuery是 request带”vue”这个query的 (如xxx.xx?vue&xxx) )
并以这样的顺序将rule重新组合
[pitcher,…clone Rules,…vue-loader] (将vue-loader放到最后,将pitch-loader放到最开始)
pitcher-loader的匹配条件是,request中带”vue”这个query (如xxx.xx?vue&xxx)
Step1:
当处理一个.vue文件的时候,vue-loader会判断,如果request不带type=vue,会生成下面这一大段js module:
"import { render, staticRenderFns } from "./index.vue?vue&type=template&id=2964abc9&"
import script from "./index.vue?vue&type=script&lang=ts&"
export * from "./index.vue?vue&type=script&lang=ts&"
/* normalize component */
import normalizer from "!../node_modules/vue-loader/lib/runtime/componentNormalizer.js"
var component = normalizer(
script,
render,
staticRenderFns,
false,
null,
null,
null
)
/* hot reload */
if (module.hot) {
var api = require("/Users/huhao/Desktop/demo/node_modules/vue-hot-reload-api/dist/index.js")
api.install(require('vue'))
if (api.compatible) {
module.hot.accept()
if (!api.isRecorded('2964abc9')) {
api.createRecord('2964abc9', component.options)
} else {
…
Step2:
然后开始对这个新生成的一坨jsmodule进行处理,依赖收集的过程中,会拿到
import { render, staticRenderFns } from "./index.vue?vue&type=template&id=2964abc9&"
import script from "./index.vue?vue&type=script&lang=ts&"
export * from "./index.vue?vue&type=script&lang=ts&"
…
这些行request,然后对每个request进行resolve,创建独立的module..
因为request带vue这个query,所以会先被pitcher-loader处理,pitcher在runLoaders过程中操作,会第一个执行,剔除掉eslint-loader,剔除pitcher自身,根据不同的type=xxx 返回一段新的request,
..有template的..
..有style的..
..有script的..
然后我们会发现这个时候处理script的生成的request,附带了ts-loader了。
问题: 为什么script的部分生成的request。。直接就判定附带有ts-loader了
"/Users/huhao/Desktop/demo/node_modules/ts-loader/index.js??ref--2!/Users/huhao/Desktop/demo/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/huhao/Desktop/demo/src/index.vue?vue&type=script&lang=ts&"
我们向前看,
在最后生成上面这坨request的过程前,会先经过build的过程,
在调用栈doBuild的时候,要执行runLoaders方法的时候,this.loaders就已经包括ts-loader了
ts-loader如何与vue单文件组件衔接的更多相关文章
- webpack入坑之旅(五)加载vue单文件组件
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- Vue单文件组件
前面的话 本文将详细介绍Vue单文件组件 概述 在很多 Vue 项目中,使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页 ...
- vue 单文件组件
在很多vue项目中,我们使用vue.component来定义全局组件,紧接着用new Vue({el:'#container'})在每个页面内指定一个容器元素 这种方式在很多中小规模的项目中运作的很好 ...
- webpack打包vue单文件组件
一.vue单文件组件 ①文件扩展名为 .vue 的 就是single-file components(单文件组件) ②参考文档:单文件组件 二.webpack加载第三方包 ①项目中,如果需要用到一些第 ...
- 基于VSCode的vue单文件组件模板设置---一次设置,可爽终生
第一步: 第二步: 第三步: 打开vue.json文件后,如果是初次设置,应该如下图所示,绿色注释部分不用管,注意那两个白色大括号 第四步:在大括号内全部粘贴如下代码,保存即可完成vue模板的设置 & ...
- vue 单文件组件最佳实践
vue 单文件组件最佳实践 生命周期 template <template> <section> <h1>vue single file components te ...
- 一丢丢学习之webpack4 + Vue单文件组件的应用
之前刚学了一些Vue的皮毛于是写了一个本地播放器https://github.com/liwenchi123000/Local-Music-Player,如果觉得ok的朋友可以给个star. 就是很简 ...
- vue单文件组件的构建
在很多Vue项目中,我们使用 Vue.component 来定义全局组件,这种方式在很多中小规模的项目中运作的很好. 但当在更复杂的项目中,就有了很大的弊端. 我们就可以用文件扩展名 .vue的单文件 ...
- Vue单文件组件基础模板
背景 相信大家在使用Vue开发项目时,基本都是以单文件组件的形式开发组件的,这种方式好处多多: 1.代码集中,便于开发.管理和维护 2.可复用性高,直接将vue文件拷贝到新项目中 我暂时就想到这两点, ...
随机推荐
- NORDIC GATT事件
假设有两个服务,每个服务注册相应事件 注册的事件为ble_dev_cfg_on_ble_evt.ble_lora_cfg_on_ble_evt 当在任何一个服务中发生GATT特征读或写的时候,注册的这 ...
- pytest的使用
一.python安装 1.windows(server): 双击python-3.6.7-amd64.exe执行安装流程,使用默认安装方式即可. 安装完成后查看是否安装成功: C:\Users\Adm ...
- C语言-数字字符串转换成这个字符串对应的数字(十进制、十六进制)
数字字符串转换成这个字符串对应的数字(十进制.十六进制) (1)数字字符串转换成这个字符串对应的数字(十进制) 要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整 ...
- Jumpserver1.4.1安装
第1章 CentOS环境准备 Jumpserver官网: http://docs.jumpserver.org/zh/docs/step_by_step.html 测试推荐硬件 CPU: 64位双核处 ...
- php查找判断二维数组中是否含有某个值
$arr = array( array('a', 'b'), array('c', 'd') ); in_array('a', $arr); // 此时返回的永远都是 false deep_in_ar ...
- Liux chmod 给文件夹赋权限
777 最高权限 给文件夹及子文件夹赋权限 chmod -R 777 * 给单独文件赋权限 chmod -R 777 ./startup.sh
- solr 数据库关联,表数据添加不进solr,一直indexing
id没有映射,数据库表字段没有id,要把其中一字段映射为id
- 放大镜如何用js
例如: let imgs = { small: ["imgA_1.jpg", "imgB_1.jpg", "imgC_1.jpg"], mi ...
- Acwing-166-数独(搜索)
链接: https://www.acwing.com/problem/content/168/ 题意: 数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图中每行.每列.每个3 × 3 ...
- node的http与前端交互示例(入门)
一.目录(node_modules是npm install后新增的) node 和 npm 版本 npm install http 二.node下的index.js var http = requir ...