欢迎光临
我们一直在努力

vue项目中main.js的用法

在Vue项目中,main.js是项目的入口文件,它负责创建和挂载根实例,本文将详细介绍如何在Vue项目中使用main.js。

引入Vue框架

我们需要在main.js文件中引入Vue框架,可以通过以下方式引入:

import Vue from 'vue'

引入插件

在Vue项目中,我们可能需要使用一些插件来增强功能,我们可以使用vue-router来实现前端路由,在main.js文件中,我们可以这样引入并使用vue-router插件:

import VueRouter from 'vue-router'
Vue.use(VueRouter)

引入组件

在Vue项目中,我们通常会将页面划分为多个组件,在main.js文件中,我们可以这样引入并注册组件:

import App from './App.vue'
import Home from './components/Home.vue'
import About from './components/About.vue'
const router = new VueRouter({
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
})
new Vue({
  router,
  render: h => h(App)
}).$mount('app')

引入样式和静态资源

在Vue项目中,我们可能需要引入外部的样式和静态资源,在main.js文件中,我们可以这样引入:

import './assets/css/style.css'
import './assets/img/logo.png'

全局事件总线(Event Bus)

在Vue项目中,我们可能会遇到多个组件之间需要进行通信的情况,为了实现组件之间的解耦,我们可以使用全局事件总线(Event Bus),在main.js文件中,我们可以这样创建和使用全局事件总线:

// 创建全局事件总线对象
Vue.prototype.$eventBus = new Vue()

在组件中使用全局事件总线:

// 触发事件
this.$eventBus.$emit('eventName', data)
// 监听事件
this.$eventBus.$on('eventName', this.handleEvent)

打包优化

在开发完成后,我们需要对项目进行打包优化,可以使用webpack等工具进行打包,在main.js文件中,我们可以这样配置打包:

const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const CompressionPlugin = require('compression-webpack-plugin')
const BrotliGzipPlugin = require('brotli-gzip-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const ManifestPlugin = require('webpack-manifest-plugin') // 生成manifest文件,用于离线应用缓存 manifest.json文件需要单独配置生成路径和输出路径,这里不做赘述,具体可参考官方文档。																																																		
// 配置HTML模板
const template = path.resolve(__dirname, '../src/index.html')
const htmlWebpackPlugin = new HtmlWebpackPlugin({
  template,
  filename: 'index.html',
  inject: 'body'
})
module.exports = {
  entry: './src/main.js',
  output: {
    filename: '[name].[hash].js',
    path: path.resolve(__dirname, '../dist'),
    publicPath: '/dist/'
  },
  module:
  {
    rules: [
      {
        test: /\\.css$/,
        use: [{
         loader: MiniCssExtractPlugin.loader,
         options: {
           publicPath: '../'
         }
        },
       {
         loader: 'css-loader',
         options: {
           minimize: true
         }
        },
       {
         loader: 'postcss-loader',
         options: {
           sourceMap: true
         }
        }]
      },
      {
        test: /\\.less$/,
        use: [{
         loader: MiniCssExtractPlugin.loader,
         options: {
           publicPath: '../'
         }
        },
       {
         loader: 'css-loader',
         options: {
           minimize: true
         }
        },
       {
         loader: 'postcss-loader',
         options: {
           sourceMap: true
         }
        },
       {
         loader: 'less-loader',
         options: {
           lessOptions: {
             modifyVars:
             {
               primaryColor: '1DA57A',
               linkColor: '1DA57A',
               borderRadius: '2px'
             }
           }
         }
        }]
      },
      {
        test: /\\.(png|jpg|gif|svg)$/,
        use: [{
          loader: 'url-loader',
          options: {
            limit: 8192,
            name: 'img/[name].[hash:7].[ext]'
          }
        }]
      },
      {
        test: /\\.(woff|woff2|eot|ttf|otf)$/,
        use: [{
          loader: 'file-loader',
          options: {
            name: 'fonts/[name].[hash].[ext]'
          }
        }]
      },
      {
        test: /\\.js$/,
        exclude: /node_modules/,
        use: [{
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }]
      }
    ]
  },\plugins:\[
ew CleanWebpackPlugin({\templatePath: path.resolve(__dirname, '../dist'),}),
ew MiniCssExtractPlugin({\filename: '[name].[hash].css'}),
ew OptimizeCSSAssetsPlugin({\options}),
ew UglifyJsPlugin({\options}),
ew TerserPlugin({options}),
ew CompressionPlugin({\algorithms: ['gzip', 'brotliCompress']}),
ew BrotliGzipPlugin({\options}),\htmlWebpackPlugin,
ew ManifestPlugin({\generateManifestFile:\true}),
ew BundleAnalyzerPlugin({})]}//导出配置对象module.exports = config;//导出公共路径配置Object.assign(config, {\publicPath:\'/\'});//导出环境变量config;process.env.NODE_ENV === \'production\\' && config;//导出服务器配置devServer;if (process.env.NODE_ENV === \'development\') {\devServer} else if (process.env.NODE_ENV === \'production\\') {\devServer}console.log(\'build successfully!\\');/*eslint no-console*/
赞(0) 打赏
未经允许不得转载:九八云安全 » vue项目中main.js的用法

评论 抢沙发