搭建Webpack+Vue3+TS开发环境

498 阅读1分钟

一、依赖安装

1. 创建项目

创建项目文件夹webpack-vue

mkdir webpack-vue
cd webpack-vue

2. 安装依赖

初始化并安装依赖。(为了方便查看,下述命令手动进行了换行)

pnpm init
tsc --init

pnpm i webpack webpack-cli vue-loader@next @vue/compiler-sfc ts-loader typescript 
css-loader vue-style-loader webpack-dev-server html-webpack-plugin 
@types/node path @types/webpack-dev-server ts-node -D
pnpm i vue -S

二、配置文件

1. 在根目录下创建并配置webpack.config.ts

对webpack进行一些简单的配置,如有需要,自行更改。

import { VueLoaderPlugin } from 'vue-loader';
import { Configuration } from 'webpack';
import { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';
import HTMLWebpackPlugin from 'html-webpack-plugin';

const config: WebpackConfiguration = {
  mode: 'development',
  entry: './src/main.ts',
  module: {
    rules: [
      {
        test: /.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /.ts$/,
        loader: 'ts-loader',
        options: {
          // 允许 ts-loader 处理 .vue 文件中的 <script lang="ts">
          appendTsSuffixTo: [/.vue$/]
        }
      },
      {
        test: /.css$/,
        use: ['vue-style-loader', 'css-loader']
      }
    ]
  },
  resolve: {
    extensions: ['.ts', '.js', '.vue', '.json']
  },
  plugins: [
    new VueLoaderPlugin(),
    new HTMLWebpackPlugin({
      template: './public/index.html',
      filename: 'index.html',
      title: 'Vue 3 + TypeScript'
    })
  ],
  devServer: {
    port: 10537,
    open: true,
    liveReload: false
  }
};

export interface WebpackConfiguration extends Configuration {
  devServer?: WebpackDevServerConfiguration;
}

export default config;

2. 配置tsconfig.json

对tsconfig进行配置后才能支持webpack.config.ts,具体见关于webpack.config.ts的描述。这里列出基础的配置:

{
  "compilerOptions": {
    "target": "ES5",
    "module": "commonjs",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*", "webpack.config.ts"],
  "exclude": ["node_modules", "dist"]
}

3. 在src目录下配置vue文件的类型

在src目录下创建shim-vue.d.ts文件,内容如下:

declare module '*.vue' {
  import { DefineComponent } from 'vue';
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

三、🥧 两种在webpack中建立静态资源服务的方案

1. 通过static配置项

在static中directory指向静态资源的目录,publicPath设置静态资源访问路径。

2. 通过setupMiddlewares配置项

在setupMiddlewares中可以配置中间件(如express)。下列例子通过express.static来配置静态资源服务。

const config = {
  ...,
  devServer: {
    port: 10537,
    open: false,
    liveReload: false,
    static: {
      directory: resolve(__dirname, 'assets'),
      publicPath: '/assets'
    },
    setupMiddlewares(middlewares, { app }) {
      if (!app) throw new TypeError('app is not defined');
      app.use('/public', express.static(resolve(__dirname, 'assets')));
      return middlewares;
    }
  }
}