webpack小白入门之核心概念【1-2】

github代码地址

通过 npm script 运行 webpack


在package.json文件中运行的脚本,默认是可以读取到 node_modules/.bin/下面的所以命令的通过npm run build运行打包

原理:模块的局部安装会在node_modules/.bin目录下创建软链接

在package.json的scripts中添加一条脚本命令:  "build":"webpack",

  {

    "name": "webpack.1.2",

    "version": "1.0.0",

    "description": "通过 npm script 运行 webpack",

    "main": "index.js",

    "scripts": {

      "build":"webpack",

      "test": "echo \"Error: no test specified\" && exit 1"

    },

    "keywords": [],

    "author": "",

    "license": "ISC",

    "devDependencies": {

      "webpack": "^4.35.3",

      "webpack-cli": "^3.3.5"

    }

  }

通过在终端运行npm run build 即可完成打包项目。

### webpack 核心概念之entry用法

在webpack.config.js文件中:

1. 单入口:entry是一个字符串。

  module.exports = {

    entry:'./src/file.js'

  }

1. 多入口:entry是一个对象

  module.exports = {

    entry: {

      index: './src/index.js',

      search: './src/search.js'

    }

  }


 webpack 核心概念之Output的用法

1. Output用来告诉webpack如何将编译后的文件输出到磁盘

    module.exports = {

      entry: './src/index.js',

      output: {

        path: path.join(__dirname, 'dist'),  // 单入口只要配置path和filename这两个参数

        filename: 'bundle.js'

      },

      mode:'production'

    }

1. Output多入口配置

    module.exports = {

      entry: {

        index: './src/index.js',

        search: './src/search.js'

      },

      output: {

        filename: '[name].js',  // 通过占位符确保文件名称的唯一性

        path: __dirname + '/dist'

      },

      mode:'production'

    }

 webpack 核心概念之loaders的用法

webpack的开箱即用只支持js和json两种文件类型,通过loaders去支持其他文件类型,并且将他们转化成有效的模块,并且可以添加到依赖图中,loaders本身是一个函数,接受源文件作为参数,返回转换后的结果。

常见的loaders


| 名称 | 描述 |

| :----: | :----: |

| babel-loader | 转换ES6ES7等新特性语法 |

| css-loader | 支持.css文件的加载和解析 |

| less-loader | 将less转换为css |

| ts-loader | 将ts转换为js |

| file-loader | 进行图片,字体等的打包 |

| raw-loader | 将文件以字符串的形式导入 |

| thread-loader | 多进程打包js和css |

  module.exports = {

    entry: './src/index.js',

    output: {

      path: path.join(__dirname, 'dist'),

      filename: 'bundle.js'

    },

    mode: 'production',

    module: {

      rules: [

        {

          test: /\.txt$/, use: 'raw-loader'    // test 指定匹配规则 use 指定使用的loader名称

        }

      ]

    }

  }

 webpack 核心概念之plugins的用法

插件用于bundle文件的优化,资源管理和环境变量注入,作用于整个构建过程

常见的plugins

| 名称 | 描述 |

| :----: | :----: |

| CommonsChunkPlugin | 将chunks相同的模块代码提取成公共js文件 |

| CleanWebpackPlugin | 清理构建项目 |

| ExtractTextWebpackPlugin | 将chunks相同的模块代码提取成公共js文件 |

| CommonsChunkPlugin | 将css从bundle文件里提取成独立的css文件 |

| CopyWebpackPlugin | 将文件或者文件夹拷贝到构建的输出目录 |

| HtmlWebpackPlugin | 创建html文件去承载输出的bundle |

| UglifyjsWebpackPlugin | 压缩js |

| ZipWebpackPlugin | 将打包出的资源生成一个Zip包 |

  module.exports = {

    entry: './src/index.js',

    output: {

      path: path.join(__dirname, 'dist'),

      filename: 'bundle.js'

    },

    mode: 'production',

    module: {

      rules: [

        {

          test: /\.txt$/, use: 'raw-loader'    // test 指定匹配规则 use 指定使用的loader名称

        }

      ]

    },

    plugins: [

      new HtmlWebpackPlugin({

        template: './src/index.html'  //  创建html文件去承载输出的bundle

      })

    ]

  }

### webpack核心概念之mode的用法

<b> 概念:</b>Mode用于指定当前的构建环境是:production , development ,还是 none 。设置mode的值,可以使用webpack在相应阶段的内置函数,默认值为production(webpack4.x以后才有的概念),如果是productin,webpack会默认开启一些在生产阶段才使用的内置功能,如下参考:

| 选项 | 描述 |

| :----: | :----: |

| development | 设置process.env.NODE_ENV的值为development,开启NameChunksPlugin和NameModulesPlugin |

| production | 设置process.env.NODE_ENV的值为production,开启FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,ModuleConcatenationPlugin,NoEmitOnErrorsPlugin,OccurrenceOrderPlugin,SideEffectsFlagPlugin和TerserPlugin |

| none | 不开启任何优化选项 |

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

推荐阅读更多精彩内容