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個地方,看下圖:

image.png

接下來,我們要修改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,
    },


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM