webpack

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。

一:webpack的作用:
1) 打包(依赖->把多个文件打包成一个js文件)
2) 减少http请求,较少的服务器压力,省宽带
3) 转化(比如 less/sass/ts) 需要loader
4) 优化(SPA越来越盛行,前端项目复杂度高,webpack可以对项目进行优化)

二:webpack安装(前提:必须先确保node环境已经安装了)
webpack webpack库
webpack-cli webpack客户端,包含webpack命令
webpack-dev-server 启动一个web服务

三:.开发环境:
简介:就是平时编写代码的环境
English:development
(2) 生产环境:
简介:项目开发完毕,部署上限
English:production

四: 常用loader:
1.js处理
babel-loader,
2.css处理
style-loader,css-loader,sass-loader,
3.文件处理
url-loader,file-loader 如果文件小于限制就转成DataUrl
4.处理vue文件
vue-loader 加载.vue文件并处理成js


ps:关于loader的写法:
1) use:["xxx-loader","xxx-loader"]
2) loader:["xxx-loader","xxx-loader"]
3) use:[
{loader:"style-loader"},
{loader:"style-loader"}
]


五:常用插件

  1.      CommonsChunkPlugin  抽取页面逻辑,已弃用,使用
    
  2.     html-webpack-plugin   处理html
    
  3.      HotModuleReplacementPlugin  模块热替换,webpack4.0的支持不够好
    
  4.     UglifyjsWebpackPlugin 处理js,已启用合并到webpack4.0 webpack -p会压缩js和css
    
  5.      clean-webpack-plugin  删除构建的文件夹
    
  6.    mini-css-extract-plugin 抽取css,替代extract-text-webpack-plugin
    
  7.     vue-loader/lib/plugin  引入vue-loader
    
  8.     html-webpack-plugin   处理html,并自动引用output的文件
    

六: 安装命令
全局安装:cnpm install -g webpack, webpack-cli, webpack-dev-server
本地安装:cnpm install -D|--save-dev babel-loader

七:webpack执行命令:
webpack src/indexjs --output dist.bundle.js 在没有配置文件的情况下的执行方式
webpack 配置文件后直接webpack执行
webpack --mode development 开发环境编译
webpack --mode production 生产环境编译(压缩文件)
webpack --help 指令帮助(提示能用那些webpack的命令)
webpack -p 生产环境编译,自动压缩css、js
webpack -w 监听文件并实时构建
--devtool eval 为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号
--progress 显示合并代码进度
--colors --hot 命令行中显示颜色
--content-base 指向设置的输出目录

八:webpack配置文件:
文件名:webpack.config.js 遵循commonJS规范
配置文件结构示例:
module.exports = {
entry:{}, 入口文件
output:{}, 出口文件 //整体打包的路径注意点需要一个绝对路径
module:{ 加载器
rules:[
{
test:/.js$/, 正则判断文件类型
exclude:"node_modules", 排除那些目录文件不使用babel-loader
use:["babel-loader],
}
]
},
plugins:[], 插件
devtool:"", 开发配置
devServer:{} 开发服务器
}


具体引用

   const path = require('path');
    const webpack = require('webpack');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
     const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  // 引入vue-loader
const VueLoaderPlugin = require('vue-loader/lib/plugin')

//配置插件
const plugins = [
// 引入vue插件
new VueLoaderPlugin(),
// 从页面中抽离css
new MiniCssExtractPlugin({
    filename: '[name].[contenthash:6].css'
}),
// 删除构建目录
new CleanWebpackPlugin(['build/assets/']),
//处理html,并自动引用output的文件
new HtmlWebpackPlugin({
    //目标文件
    filename: '../index.html',
    //模版文件
    template: './src/index.html',
    //对文件进行压缩
    minify: {
        //压缩代码
        minimize: true,
        //移除注释
        removeComments: true,
        //去掉空格
        collapseWhitespace: true,
        //压缩行内css
        minifyCSS: true,
        //压缩行内js
        minifyJS: false
          }
        })
    ];

   module.exports = {
//构建模式,development or production
mode: process.env.NODE_ENV || 'development',
//输入配置
entry: {
    index: './src/js/index.js',
    vendors: ['jquery']
    },
    //输出配置
    output: {
    filename: '[name].[hash:6].js',
    path: path.resolve(__dirname, 'build/assets/'),
    publicPath: 'assets/'
},
    //是否生成source map以及如何生成
    devtool: 'eval-source-map',
    // devtool: 'none',
  devServer: {
      //serve加载的目录
      contentBase: './build',
      port: 9000,
    //打开浏览器
    open: true,
    //启用gzip压缩文件
    compress: true,
    //强制页面访问index.html
    historyApiFallback: true,
    //实时刷新
    inline: true,
    //支持模块热更新
    hot: true
                },
//模块操作
      module: {
      rules: [{
            test: /\.vue$/,
            loader: 'vue-loader'
        },
        {
            test: /\.(js|jsx)$/, //正则判断文件类型
            exclude: /node_modules/, //排除这个文件夹不处理
            use: ['babel-loader'] //使用加载器  
        },
        {
            test: /\.css$/,
            use: [MiniCssExtractPlugin.loader, 'css-loader']
        },
        {
            test: /\.scss$/,
            use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
        },
        {
            test: /\.(gif|png|jpe?g|svg)$/i,
            use: [{
                loader: 'url-loader',
                options: {
                    name: '[name].[hash:6].[ext]',
                    limit: 1024
                }
            }]
        },
        {
            test: /\.(eot|ttf|svg|woff)$/,
            use: ['url-loader']
          }
        ]
      },
  plugins,
  optimization: {
      splitChunks: {
          cacheGroups: {
              commons: {
                test: /[\\/]node_modules[\\/]/,
                name: "vendors",
                  }
              }
            }
      }
  };

vue写法

            <template>

         <div>

         <h2>{{message}}</h2>
     <ul>
     <li v-for="(item,index) in arr">与琪{{item}}</li>
  </ul>
 </div>

    </template>
  <script>
     export default {
      data: function(){
          return {
             message: 'Hello Vue!',
              arr: [1,2,3,4,5,6]
          }
      }
    }
                  </script>

相关js的写法

1.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容