loaders
文件夹,创建 tpl-loader.js
函数(loader就是个函数)resolveLoader.module
让其除了从 node_modules
中找 loader 外,还能从我们创建的 loaders
文件夹下找对应 loaderrules
,当遇见 .tpl
文件时,用我们的 tpl-loader
解析tpl-loader
其实就是个函数,会有个 source
参数,内容就是 tpl 文件中的源码MyTitleView({})
),最终交给 babel-loader 程序会给我们把字符串转为 JS 程序tpl-loader
function tplLoader(source) {
// webpack找到 .tpl 文件后,会找我们这个loader
// 并把文件中的资源放到 source 变量 中来
return `
export default (component) => {
component.template = \\`${source}\\`;
return component;
}
`
}
使用
import './MyTitle.scss';
import MyTitleView from './MyTitle.tpl';
export default MyTitleView({
data() {
return {
title: 'This is my TITLE',
subTitle: 'This is my SUB_TITLE'
}
},
methods: {
handleTitleClick(e) {
console.log(e.target.innerText);
}
}
}, {
template: true, // 开发时是否打印 template、data、methods
data: true,
methods: true
});
MyTitle.tpl
<div>
<h1 @click="handleTitleClick($event)">{{ title }}</h1>
<h2 @click="handleTitleClick($event)">{{ subTitle }}</h2>
</div>
MyTitle.scss
h1 {
color: red;
}
h2 {
color: purple;
}
index.js
import './MyTitle.scss';
import MyTitleView from './MyTitle.tpl';
export default MyTitleView({
data() {
return {
title: 'This is my TITLE',
subTitle: 'This is my SUB_TITLE'
}
},
methods: {
handleTitleClick(e) {
console.log(e.target.innerText);
}
}
});