淘先锋技术网

首页 1 2 3 4 5 6 7

webpack环境安装:

npm install webpack webpack-cli -g//不指定版本,默认下载最新版本,全局安装以后直接使用

mkdir webpack-demo  //创建项目文件夹,随意名字同js变量名规则

cd webpack-demo  //进入项目文件夹

npm init -y  //生成项目配置文件

创建一个webpack.config.js的打包配置文件

webpack.config.js配置文件:

const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports={	 
    // 1.项目入口配置
    context: __dirname, 
    // 单入口   输出时默认为main.js
    entry:"./index.js",  //相对于context的路径 
    // 多入口
    // entry: {
	// 	a: './test.js',      //输出时默认为a.js
	// 	b: './test2.js',     //输出时默认为b.js
	// 	test3: './test3.js'  //输出时默认为test3.js
	// }
    

    // 2.项目出口配置
    output: {
		asyncChunks: true, //创建按需加载的异步 chunk。
		
		path:__dirname+"/dist2",//输出的目录,绝对路径,默认dist
		
		// filename: 'bundle.js', //输出的文件名
		filename: '[name]-666-[id]bundle[hash:5].js',
        //输出的文件名,[hash:5]为5位哈希值,[id]为打包的chunk的id,[name]为入口的属性名,缺少则为mian
        
        // library: 'tutoule',库名
		// library: {
		// 	name: 'MyLibrary', //库名
		// 	type: 'var', //配置将库暴露的方式。
        // },

        //各种模块化导出技术的统一注释(把type设置为umd)
        // auxiliaryComment: 'Test Comment',

        // 在生成文件之前清空 output 目录
        clean: true, 
        // clean: {
		// 	keep: /ignored\/dir\//,
        // }    保留 'ignored/dir' 下的静态资源不删
    },
    
    // 3.加载器配置
    module: {
        rules: [
            //直接以style标签形式动态写入到页面 npm install css-loader   style-loader  --save-dev
            {test:/\.css$/,use:["style-loader","css-loader"]},
            //项目中引入了以下结尾的文件就会启动file-loader     npm i file-loader --save-dev
            {test:/\.jpg$/,use:["file-loader"]},
            // 引入了scss   npm install sass-loader sass webpack --save-dev
            {test:/\.s[ac]ss$/i,use:["style-loader","css-loader","sass-loader"]},
            // 引入ts       npm install ts-loader  webpack typescript  --save-dev
            {test:/\.ts$/,use:"ts-loader"},
        ]
    },

    
    // 4.插件配置
    plugins: [new HtmlWebpackPlugin({
        title: "plugins", //html的标题默认为"Webpack App",
        filename: "test.html", //模板html打包后生成的文件名,放在output.path里面,默认"index.html"
        template: __dirname + "/index.html", //模板html文件的路径,
        inject: "body", //'head' || 'body' 打包后的bundle挂载到模板html的位置:'body' 放置在body元素的底部。'head'将把脚本放在head元素中。,
        publicPath: "./", //The publicPath used for script and link tags,
        // favicon:__dirname + "/public/favicon.ico", //打包前前前小图标的路径,默认为:"",
        //"洗澡":压缩项配置
        // minify:true,
        minify: {
            collapseWhitespace: true, //是否压缩HTML:空格回车
            keepClosingSlash: true,//在单元素上保留末尾的斜杠
            removeComments: true, //是否清除HTML注释  
            removeRedundantAttributes: true,
            removeScriptTypeAttributes: true, //是否删除script的type属性(这个属性对于现代浏览器没啥用)
            removeStyleLinkTypeAttributes: true, //是否删除< style>和< link>的type="text/css"  
            minifyJS: false, //是否压缩页内JS  ,
            minifyCSS: true //是否压缩页内CSS  
        },
        cache:true,//仅当文件被更改时才重新打包,否则使用上一次打包时缓存起来的,默认true
    })],

        // 5.开发环境配置,devServer当文件发生修改,通知各个模块进行更新加载,加载到计算机内存(内存刷新 比磁盘刷新反应快),刷新浏览器
    devServer: {
        //告诉dev-server在服务器启动后打开浏览器。将其设置为true以打开默认浏览器。但是:如果你的电脑有防火墙或者有管理员权限的限制或者电脑很卡 可能不会自定打开浏览器
        open: true, //cli中 webpack serve --open					
                            
        //本地服务器监听的端口
        port: 8080,
            
        //启用热更新,直接使用webpack的热更新模块.就是改了代码自动打包后自定刷新浏览器页面:bug就是同open,记住 卡了就刷新一下不用纠结
        //热更新使得开发调试效率更高
        hot: true,
            
        //指定要使用的主机(localhost|ipv4|ipv6)。如果你想让你的服务器可以被外部访问,像这样指定:
        //让你同桌访问 然后你改项目代码 他就会刷新
        host: '192.168.12.111',
            
        //启用gzip压缩
        compress: true,
                
        //代理配置,这里只是配置,不用写代理服务器的代码(配置好了它帮我们实现)
        //自动配置代理 比手动设计代理服务器更方便
        proxy: {
            '/api': 'http://localhost:7001',
        },
        // proxy: {
        //      '/api': {
        //        target: 'http://localhost:7001',
        //        secure:true,//如果代理的target是https接口,需要配置它 
        //        pathRewrite: { '^/api': '/chongxie' },//请求时重写pathname
        //      },
        //    },
    }		
}