从零开始配置vue单文件,模仿vue-cli打包文件

152 阅读1分钟
安装依赖

npm i -D webpack webpack-cli babel-loader @babel/core @babel/preset-env html-webpack-plugin vue-loader vue-template-compiler webpack-dev-server css-loader style-loader url-loader postcss-loade

文件说明

index.html // 模板文件(html-webpack-plugin)

main.js // 入口文件(babel-loader @babel/core @babel/preset-env es6语法)

webpack.config.js // webpack配置 (webpack webpack-cli webpack-dev-server css-loader style-loader url-loader postcss-loade)

App.vue // vue实例(vue-loader vue-template-compiler)

img

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>打工人打工魂</title>
  </head>

  <body>
    <div id="app"></div>
  </body>
</html>

webpack.config.js

const path = require('path');
const HtmlWebpackplugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
  mode: 'development', // 指定开发者打包模式 
  entry: './src/idex.js', //入口文件 
  output: { filename: 'index.js', path: __dirname + '/dist' },
  module: {
    rules: [{
      /*将js文件转码成es5*/
      test: /\.js?$/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } }
    },
    {
      test: /\.vue$/, use: [{
        loader: 'vue-loader', options: {
          compilerOptions: { preserveWhitespace: false },
        }
      }]
    }]
  },
  plugins: [
    new HtmlWebpackplugin({
      filename: 'index.html', // 打包后的文件名,默认index.html
      template: path.resolve(__dirname, 'index.html') // 导入被打包的文件模板 }), 
    }), 
    new VueLoaderPlugin() 
  ]
}

main.js

import Vue from 'vue'
import App from './App.vue' 

new Vue({ render: h => h(App) }).$mount('#app');

App.vue

<template>
  <div id="app"></div>
</template>
<script>
export default {}
</script>
引用

juejin.cn/post/684490…