效果
一个vue单页组件,将html、css、js拆分成多个文件,方便维护和管理,如下图所示:
我们知道,如果是按照这样存放文件,webpack是无法帮我们将多个文件组装成一个.vue文件的,所以我们使用loader来先进行组装
webpack loader
webpack的loader作用很大,用处也很多,就比如我们的sass,正常浏览器是不认识这种样式的,所以需要我们在打包之前,使用loader将我们的sass转换成正常的css
所以我们想要对多个文件进行拼接,则我可以自己写一个loader,提前帮我们把文件组装起来再给webpack进行打包
loader配置
拿vue项目来说,我们需要在vue,config.js中进行loader配置,下面代码意思是,rule进行匹配,如果遇到js、jsx、vue、scss文件,会使用
./src/test/fileLoader.js这个loader进行处理(调用本地的loader方式)
// vue.config.js
chainWebpack: config => {
config.module
.rule('jsone')
.test(/\.m?jsx?$/)
.pre()
.include
.add(resolve(__dirname,'./src/test'))
.end()
.use(require.resolve('./src/utest/fileLoader.js'))
.loader(require.resolve('./src/test/fileLoader.js'))
.end()
.end()
.rule('vueone')
.test(/\.vue$/)
.pre()
.include
.add(resolve(__dirname,'./src/test'))
.end()
.use(require.resolve('./src/test/fileLoader.js'))
.loader(require.resolve('./src/test/fileLoader.js'))
.end()
.end()
.rule('scssone')
.test(/\.scss$/)
.pre()
.include
.add(resolve(__dirname,'./src/test'))
.end()
.use(require.resolve('./src/test/fileLoader.js'))
.loader(require.resolve('./src/test/fileLoader.js'))
.end()
}
loader支持链式调用,所以如上所写没问题
后面需要用到的loader的api
addDependency
加入一个文件,作为结果的依赖,使它们的任何变化都可以被监听到(当监听的依赖内容发生变化的时候,就会重新编译)