webpack资源构建,打包的工具

286 阅读3分钟

webpack

1.webpack是一种静态资源构建,打包的工具
    	除了webpack还有grunt,gulp,百度(fis)
2.下载package.json文件
	npm init -y
	backage.json文件里配置
		"scripts": {
                  "build": "webpack"
              },
3.安装webpack,webpack-cli
	npm install webpack webpack-cli --save-dev
	简写:npm i webpack webpack-cli -D
	检测:./node_modules/.bin/webpack -v
4.在项目根目录下创建一个src,并建立一个index.js
5.在项目根目录下运行npm run build
	会构建一个dest目录并生成main.js文件
	
	webpack4.x默认是零配置
		默认的入口:src/index.js
		默认出口:dist/main.js
		
		手动配置
		入口:src/xxx.js
		出口:dist/bundle.js
6.如果手动配置,必须创建webpack配置文件来执行
	默认webpack配置文件:webpack.config.js
		const path=require("path")
		const config={
    			//项目入口文件
    			entry:"./src/main.js",
    			output:{
        			//项目输出目录
        			path:path.resolve(__dirname,"dist"),
        			//输出的文件名
        			filename:"bundle.js"
    			}

}
		module.exports = config;
		*webpack如何指定多入口:通过给entry添加对象形式配置多入口
		entry:{
                  "main":"./src/main.js",
                   "home":"./src/home.js"
             },
		output:{
        		//项目输出目录
        		path:path.resolve(__dirname,"dist"),
        		//输出的文件名
        		filename:"[name].js"  //chunk
    		},
	如果运行指定的配置文件,而不是默认的webpack.config.js,则在通过      scripts运行时添加--config
	例如:
	"scripts": {
           "build": "webpack --config webpack.config.js",
            "dev": "webpack-dev-server"
       },
说明:webpack可以将node服务端的js代码通过构建直接运行在浏览器

7.
	*黄色警告解决
	    mode:"development"  //开发环境
	    或
	    mode:"production"    //生产环境--线上环境
	    或
	    mode:"none"  //不配置
	*清理打包后的垃圾(多余)文件
		安装:clean-webpack-plugin
			npm install clean-webpack-plugin -D
		引入:webpack.config.js里
             const { CleanWebpackPlugin } = require('clean-webpack-plugin')
		调用:plugins:[
                      new CleanWebpackPlugin()
                   ]
	*通过package.json的scripts属性运行npm包
		npm i webpack-dev-server -D
		"scripts": {
                       "build": "webpack",
                        "dev":"webpack-dev-server"
               },

			npm run scripts的属性名
		问题二:运行npm的别慢,那就改一下npm镜像,改成npm淘宝镜像
		npm config set registry https://registry.npm.taobao.org

		查看修改的配置:npm config list
		在webpack.config.js文件内
		//启动服务器环境
		devServer:{
                port:"9999",
			contentBase: path.join(__dirname, 'dist')
             }
	*把构建环境自动注入index.html文件内
		安装:npm install html-webpack-plugin -D
		引入:
            const HtmlWebpackPlugin = require('html-webpack-plugin');
		配置:
		plugins:[
                    //添加多余文件清理插件
                     new CleanWebpackPlugin(),
                     new HtmlWebpackPlugin({
                          title: '管理输出'
                     })
             ],
		//把index.html文件当成模板,打包时改名home.html
		plugins:[
        		//添加多余文件清理插件
        		new CleanWebpackPlugin(),
        		new HtmlWebpackPlugin({
                		template:"./index.html", //读取模板的入口文件
                		filename:'index.html'  //生成打包后的html
            		})
    		],
	*样式
		安装插件
		npm install style-loader css-loader -D
		配置webpack.config.js中
		module:{
                rules:[
                   {test:/\.css$/,use:['style-loader','css-loader']}
                 ]
             }
		main.js中引入
		import './style/test.css'
	*配置less和sass
	webpack识别less:
		安装:npm install less less-loader -D
		配置:
		 rules:[
            	{test:/\.css$/,use:['style-loader','css-loader']},
            	{test:/\.less$/,use:['style-loader','css-							loader','less-loader']},
        		]
		使用:用@符号
		@border_c:blue;
		div{
    			border: 1px solid @border_c;
		}
	webpack识别sass:
		安装:npm install node-sass sass-loader@7.3.1 -D
		配置:
		rules:[
            {test:/\.css$/,use:['style-loader','css-loader']},
            {test:/\.less$/,use:['style-loader','css-loader','less-loader']},
            {test:/\.(sass|scss)$/,use:['style-loader','css-loader','sass-loader']},
        ]
		使用:用$符号
		$border_c:blue;
		div{
    			border: 1px solid $border_c;
		}
*webpac识别图片或其他文件:
	npm install url-loader -D

集成vue

1.安装es6的包:babel
	npm install --save-dev babel-loader @babel/core  @babel/preset-env -D
	配置:
	{ test: /\.js$/, exclude: /node_modules/, loader: "babel-				loader" }
	创建.babelrc文件
	{
  		"presets": ["@babel/preset-env"]
	}
2.安装vue包:vue, vue-loader,vue-template-compiler
	安装:npm install vue vue-loader vue-template-compiler
	webpack.config.js中引入:
	const VueLoaderPlugin = require('vue-loader/lib/plugin');
	配置:plugins:[
        		new VueLoaderPlugin()
    ],
    一. index.html文件
        <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>我是项目的入口</title>
            </head>
            <body>
                <h1>我是注入的html</h1>
                <div id="app"></div>
            </body>
            </html>
	二. 在src下建App.vue文件
		<template>
            <div>
                <h2>{{title}}</h2>
                <p>我来到了vue世界</p>
            </div>
        </template>
        <script>
        export default {
            name:"app",
            data(){
                return{
                    title:"我就是我"
                }
            }
        }
        </script>
    三. main.js里配置
        import Vue from "vue";
        import App from "./App.vue"
        new Vue({
            el:"#app",
            render:(h)=>h(App)
        })
3.路由配置:
    安装:vue vue-router 
    创建router文件夹
        下index.js里配置路由
            import Vue from "vue";
            import Router from "vue-router";
            import Home from "../components/Home.vue"
            import Cate from "../components/Cate.vue"
            Vue.use(Router)
            
            const router = new Router({
                routes:[
                    {
                        path: '/home',
                        component: Home,
                        name:'Home'
                    },
                    {
                        path: '/cate',
                        component: Cate,
                        name:'Cate'
                    }
                ]
            
            })
            export default router;
            
        main.js里引入router
            import Vue from "vue";
            import App from "./App.vue"
            import router from "./router/index.js"
            new Vue({
                el:"#app",
                router,
                render:(h)=>h(App)
            })
        App.vue根组件里展示
            <router-view></router-view>