vue+typescript引入vant的webpack配置
前言
vant是vue开发者常用的ui组件库,按需引入vue项目的方法,参考官网的操作即可,但是如果使用ts来编写项目,按需引入方式就大大的不同了,我们分别看下2中方式按需接入vant的区别:
vue + js
我们需要借助babel 插件按需引入组件, 在.babelrc 或 babel.config.js 中添加配置:
{
"plugins": [
[
"import",
{
"libraryName": "vant",
"libraryDirectory": "es",
"style": true
}
]
]
}
接着你可以在代码中直接引入 Vant 组件,插件会自动将代码转化为按需引入的形式。
// 原始代码
import { Button } from 'vant';
components: {
[Button.name]: Button
}
// 编译后代码
import Button from 'vant/es/button';
import 'vant/es/button/style';
vue3+typescript
vant官网有这么一句话,如果你在使用 TypeScript,可以使用 ts-import-plugin 实现按需引入。
我们点击这个链接,找到ts-loader处,我们要修改2个地方,看下图:
接下来,我们要修改vue-cli的内部webpack的配置,不熟悉的同学可以参考vue-cli官网webpack相关的内容,来修改webpack的配置。
这里我们使用chainWebpack来按照以上的使用说明,来修改配置。在修改之前,我们首先要做的是查看一下现有的webpack配置,vue-cli 也给我们提供了这个能力审查项目的 webpack 配置
我们运行:
vue inspect > output.js
可以在我们的根目录看到一个output.js文件,里面的内容就是webpack的配置。我搜索到 ts-loader处:
/* config.module.rule('ts').use('ts-loader') */
{
loader: '/Users/wangdonghai/Documents/WDH_library/youxin_workspace/account-overseas/node_modules/ts-loader/index.js',
options: {
transpileOnly: true,
appendTsSuffixTo: [
'\\.vue$'
],
happyPackMode: false
}
}
我们需要将官网要求的配置内容,配置进这个里面:
在vue.config.js文件里执行以下代码:
const { merge } = require('webpack-merge')
const tsImportPluginFactory = require('ts-import-plugin')
module.exports = {
chainWebpack: config => {
config.module
.rule('ts')
.use('ts-loader')
.tap((options) => {
options = merge(options, {
transpileOnly: true,
getCustomTransformers: () => ({
before: [
tsImportPluginFactory({
libraryName: 'vant',
libraryDirectory: 'es',
style: true,
}),
],
compilerOptions: {
module: 'es2015',
},
}),
})
// 返回修改后的选项配置。
return options
})
}
}
我们再次运行 vue inspect > output.js
看修改后的配置:
可以看到,我们的配置已经被添加进来了。
/* config.module.rule('ts').use('ts-loader') */
{
loader: '/Users/wangdonghai/Documents/WDH_library/youxin_workspace/account-overseas/node_modules/ts-loader/index.js',
options: {
transpileOnly: true,
appendTsSuffixTo: [
'\\.vue$'
],
happyPackMode: false,
getCustomTransformers: function () { /* omitted long function */ },
compilerOptions: {
module: 'es2015'
}
}
}
接下来,我们就可以在vue3.0+typescript 项目的单文件组件里直接使用了,实现vant组件的按需引入:
import { Form, Field, Button } from 'vant'
components: {
[Form.name]: Form,
[Field.name]: Field,
[Button.name]: Button,
},