webpack打包配置/路由组件打包、路由打包

news/2024/7/10 2:10:19 标签: webpack, vue
/*
配置一个webpack,需要安装  webpack webpack-cli
yarn add webpack webpack-cli -D 或者 npm install webpack webpack-cli -D

先配置一个 package.json  yarn init 或者 npm init 一路回车,或者 -y

创建webpack.config.js,一般的要运行一个webpack项目,则需要在根目录下配置webpack.config.js,
同时他也是webpack的默认配置文件

配置完成webpack.config.js以后,需要在package.json中的scripts属性中设置启动,例如
"scripts":{
    "aa":"webpack --config webpack.config.js"
}
这样就可以使用webpack打包,yarn aa 或者 yarn run aa 或者 npm run aa

配置开发服务器,需要先安装 webpack-dev-server
yarn add webpack-dev-server -D 
安装完成以后,在package.json中scripts设置 "serve":"webpack-dev-server"
启动服务就是 npm run serve 或者 yarn serve 或者 yarn run serve


webpack的两个重点 插件 和 加载器,插件和加载器都需要安装

所有的插件,都执行在 plugins属性里面
所有的加载器都执行在 module 里面

如果需要针对HTML打包,则需要使用 html-webpack-plugin 插件
如果需要把之前打包的内容清空,则需要使用 clean-webpack-plugin 插件

加载器 loader,用来预处理需要加载的文件资源
加载css 需要引入 css-loader或者style-loader
加载图片或者其他文件资源 需要引入 url-loader和file-loader
如果需要在HTML上加载图片,则需要使用 html-withimg-loader

*/
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

const path = require('path');
//引入webpcak
const webpack = require('webpack');

module.exports = {
    entry:'./src/index.js', //要打包的文件入口
    output:{ //设置出口
        filename:'main.js', //main.[hash:8].js设置打包后的文件名,[hash:8]表示显示8位哈希码,
        避免重复
        path: path.resolve('./asd'), //path 方法,相对路径转绝对路径
    },
    devServer:{ //配置服务器
        contentBase:'./asd', //配置服务器读取文件的地址
        port:'3000', //配置服务器端口
        compress:true, //在服务端压缩
        // open:true, //启动完成后,是否自动在浏览器打开,;
        类似 "serve": "webpack-dev-server --open"
        hot:true, //热替换,只要有修改,就会立即更新
    },
    //配置插件,plugins是一个数组,数组里面的每一个元素都是一个插件
    plugins:[
        new CleanWebpackPlugin(), //清空之前打包的代码

        new HtmlWebpackPlugin({
            template:"./src/index.html",
            //配置压缩属性
            minify:{
                removeAttributeQuotes:true, //是否去掉双引号
                collapseWhitespace:true,// 是否不换行
            },
            //静态资源引入的位置 默认在head里面,它的值有body和head,如果值为false的时候,
            则不引入静态资源
            inject:'body'
        }),
        //使用插件更简单的操作热更新
        new webpack.HotModuleReplacementPlugin()
    ],
    module:{
        //使用rules设置解析规则,主要解析@import语法
        rules:[
            {
                test:/\.html$/,
                use:['html-withimg-loader']
            },

            /*
            loader 如果loader是一个单纯的字符串,说明解析该文件只用了一个loader
            如果使用多个loder,则可以使用use里面存入对象的方式,当然如果没有其他设置,
            use里面可以存放具体的loader字符串
            use中的loader 从后向前执行
            如下例,先解析css,然后再把css插入到head中,
            style-loader 的作用就是把css插入到head中

            loader的基本用法模式
            {
                test:文件格式,
                use:[解析文件的loader....]
            }

            */
            {
                test:/\.css$/,//解析的文件格式
                use:[
                    {loader:'style-loader'},
                    {loader:'css-loader'}
                ]
            },
            /*
            解析图片
            */
            {
                test:/\.(png|jpg|gif)$/,
                use:[
                    {
                        loader:'url-loader',
                        //设置其他参数
                        options:{
                            esModule:false, //设置这个以后,html-withimg-loader 才可以使用
                            limit:true,
                            outputPath:'./images'
                        }
                    }
                ]
            }
        ]
    },
    mode:'development', //设置开发环境模式
};

require.context

webpack的一个方法,一般用来打包文件夹中的组件

路由打包


const aa=require.context('../', true, /\.stories\.js$/);
// (创建出)一个 context,其中所有文件都来自父文件夹及其所有子级文件夹,request 以 `.stories.js` 结尾。
let routeArr=[]
//此导出函数有三个属性:resolve, keys, id。一般通过keys 去获得一个数组,
各项为routes组件的路径

aa.keys().forEach(element=>{
routeArr.push(aa(element).default)
})
const routes=[,,,...routeArr]

###组件打包

import Vue from 'vue'
import Vuex from 'vuex'
import Data from '@/data/data.js'
const path = require('path');

// import A from './modules/a';
// import B from './modules/b';
// import C from './modules/c';

Vue.use(Vuex)

//自动化模块
const modulesFun = require.context('./modules',true,/\.js$/);
const modulesObj = {};
modulesFun.keys().forEach(item=>{
  console.log(item); // ['./sdf//sd/sdfa.js','./b.js','./c.js']
  // 获取每一个模块的内部结构
  console.log(modulesFun(item).default); // { state:{},mutaitons:{} ... }
  //获取每一个item中的文件名
  let fileName = path.basename(item,'.js');
  console.log(fileName);
  //把每一个模块都添加到对象中
  modulesObj[fileName]=modulesFun(item).default;
});

console.log(modulesObj);

export default new Vuex.Store({
  state: {
    name:'南村群童欺我老无力',
    myData:Data.list
  },
  mutations: {
    change(state){
      state.name = state.name + '对面搞破坏';
    }
  },
  actions: {
    show(context){
      context.commit('change');
    }
  },
  modules: {
    // A:A,B:B,C:C
    ...modulesObj
  }
})


http://www.niftyadmin.cn/n/1464039.html

相关文章

fetch基于promise替代ajax请求的函数(不需要引入)

/*fetch请求*/<!DOCTYPE html><html><head><meta charset"utf-8"><title>fetch</title></head><body><button id"btn">提交</button><button id"btnpost">post提交</butt…

flutter git 拉不起来_Flutter 实现原理及实践

推荐序Flutter 是最近非常热门的移动端跨平台解决方案。多年来&#xff0c;从 PhoneGap&#xff0c;到 React Native&#xff0c;再到现在的 Flutter&#xff0c;移动开发者一直在试图使用统一的技术方案来减少开发工作量&#xff0c;但是实话说&#xff0c;当前来看算不上成功…

vue环境变量

1.mode 模式 这里的--mode后边的变量为根目录.env.xxx文件下的NODE_ENV后边 的参数 设置后&#xff0c; --mode production,是在打包后生成的文件中启动触发&#xff0c; --mode development 是在开发环境下启动触发触发模式设置&#xff0c;在package.json 的 scripts属性中设…

axios配置,添加拦截器

//https://axios-http.com/zh/docs/intro import axios from axios import URL from ./baseUrl //默认设置baseURL axios.defaults.baseURL URL; axios.defaults.headers.post[Content-Type] application/x-www-form-urlencoded;//设置拦截器 //请求拦截器 axios.intercepto…

华为手机和电脑怎么连接_华为首款轻薄VR眼镜体验:可连接手机和电脑,近视可调节...

图文 | 搜狐科技 林国振 此前&#xff0c;华为在年度旗舰发布会上&#xff0c;除了带来华为mate30系列手机之外&#xff0c;还带来了多款硬件&#xff0c;就比如颠覆传统设计的华为VR眼镜。与传统VR头显体积大、佩戴负担沉重的特点不同&#xff0c;全新的HUAWEI VR Glass从设计…

nextcloud icon_没有对比就没有伤害,吉利ICON提车记

先来问个问题&#xff0c;为什么最后选择了ICON&#xff0c;而不是缤智呢&#xff1f;这是有原因的&#xff0c;买ICON之前我试驾过缤智&#xff0c;给我的感觉真的跟ICON差不了多少&#xff0c;但是价格就差的多了&#xff0c;而且内饰上就有一定的差距。最后还是因为ICON的外…

商务通在线客服系统_在线客服系统管理功能对比:快商通、商务通、53快服、乐语、商桥...

客服系统的客服管理功能可以帮助客服中心管理人员实现对客服人员和客服工作的管理&#xff0c;从而提高客服中心的服务效率和质量。客服中心的管理主要包括了对单个客服人员服务能力的管理和以及客服中心内部的协同管理两个方面&#xff0c;以下是关于忠仕商务通、53快服、乐语…

axios安装,配置及配合vue脚手架

1.安装axios npm install axios2.脚手架中使用axios main.js中导入axios import axios from axios;//在main.js中可全局配置默认 axios.defaults.baseURL https://api.example.com; //基础URL axios.defaults.headers.common[Authorization] AUTH_TOKEN; //作者 axios.def…