webpack

webpack学习系列(一),安装webpack与webpack-cli 一、问题描述在安装webpack时,输入webpack -v提示我需要安装webpack-cli,如图:二、解决因为在webpack 3中,webpack本身和它的CLI以前都是在同一个包中,但在第4版中,他们已经将两者分开来更好地管理它们。所以用 npm install webpack-cli -g 命令全局安装webpack-cli即可,当然,网络不行的小伙伴可以用cnpm,这里就不多说了。安... 阅读详情

一、webpack基本介绍

  • **1-1**webpack基本介绍
    webpack的概念和作用
    模块打包器
    代码分割
    代码文件打包
    loader加载
    commonjs规范
    模块热更新
    适用于大型项目

  • **1-2**webpack安装和命令
    安装
    npm install webpack --save-dev

例子:
新建hello.js执行命令 webpack hello.js hello.bundle.js ,会生成hello.bundle.js文件,观察文件中的内容,可以看到webpack在文件中生成了许多其他代码

新建world.js并在hello.js文件中require('./world.js'),再执行命令webpack hello.js hello.bundle.js,观察hello.bundle.js文件中的内容

新建style.css,在样式表中随便新建几行样式html,body{background: #f00;},在hello.js文件中require('style-loader!css-loader!./style.css'),执行命令webpack hello.js hello.bundle.js(注意:用webpack加载css需要用到css-loader,行内样式需要用到style-loader。安装loader npm install css-loader style-loader --save-dev)
css-loader用来将style.css打包到hello.bundle.js文件中,使webpack能处理.css文件,如果将css-loader处理后的文件,引入到页面中后(在这个例子中引入页面的是hello.bundle.js),style-loader则会将style.css中的样式以<style></style>的形式插入到head中

如果在页面中没有加载这两个loader也可以在命令行中直接加载loader webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader'

输入webpack可以查看webpack中有哪些配置项
webpack hello.js hello.bundle.js --watch 用来监听文件,如果文件有变化则自动编译打包
webpack hello.js hello.bundle.js --progress 用来查看打包的进度
webpack hello.js hello.bundle.js --display-module 用来查看打包的模块
webpack hello.js hello.bundle.js --display-reson 用来查看打包的原因

二、webpack基本配置

  • 2-1建立项目的webpack配置

例子:
在webpack-demo目录下新建以下文件

webpack-demo
-dist
--js
-src
--script
--style
-index.html
-package.json
-webpack.config.js

webpack.config.js

module.exports = {
    entry: './src/script/main.js',//入口文件
    output: {
        path: './dist/js',//输出路径
        filename: 'bundle.js'//输出文件名
    }
}

运行 webpack 会在dist下的js目录下生成bundle.js

可在pack.json的script字段中添加配置webpack

"scripts": {
    "webpack":"webpack --config webpack.config.js --progress --display-modules --colors --display-reasons"
},
  • 2-2webpack配置的entry和output
    entry是入口文件
    ①entry可以是一个数组

    entry:[‘a.js’,’main.js’]

②entry可以是一个对象用于多入口的情况下

entry:{
    page1:'./page1'
    page2:['entry1.js','entry2.js']
}

在entry是多入口的情况下,output也应该是多个输出 filename有三个可选参数 [name]、[hash]、[chunkhash]

output: {
    path: _dirname+'/built',//输出路径
    filename: '[name].js'//输出文件名
}

注意,在不同的版本下可能会报路径不是绝对路径的错误,解决办法为

var path = require('path');
module.exports = {
    entry: [url('src/script/main.js'), url('src/script/a.js')],
    output: {
        path: url('./dist/js/'),
        filename: 'bundle.js'
    }
}
function url(url) {
    return path.resolve(__dirname, url)
}

三、生成项目中的html文件

  • 3-1自动化生成项目中的html文件(上)

安装
html-webpack-plugin(这里有个坑就是,如果在全局安装webpack,在运行npm run webpack之前需要运行 npm link webpack)
自动生成html的意义在于,html中引用的js文件好多都是webpack打包之后生成的,生成的文件名和目录都有可能改变,这个时候不能手动来修改每一个变动的路径,太耗时,这个时候就要通过html-webpack-plugins这个插件来自动在html中生成对js的引用

在webpack.config.js中加入plugins配置项

var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        main: './src/script/main.js',
        a: './src/script/a.js'
    },
    output: {
        path: './dist',
        filename: 'js/[name]-[hash].js'
    },
    plugins: [
        new htmlWebpackPlugin({
            template:'index.html',
            inject:'head'
        })
    ]
}

在htmlWebpackPlugin插件中配置项template用来定义引用的模板文件,inject用来指定脚本在dom文档中的插入位置

  • 3-2自动化生成项目中的html文件(中)

template应用场景
在参数中传参,在模板中引用

plugins: [
    new htmlWebpackPlugin({
        template:'index.html',
        inject:'head',
        title:'webpack is good'
    })
]

在html的title中,以如下的方式引用

<title><%= htmlWebpackPlugin.options.plugins.title %></title>

<%= htmlWebpackPlugin.options.title %>这种方式的引用在模板中的任何一个位置都可以,例如

plugins: [
    new htmlWebpackPlugin({
        template:'index.html',
        inject:'head',
        title:'webpack is good'
        date:new Date()
    })
]
<body>
    <%= htmlWebpackPlugin.options.date %>
</body>

这样在编译后的index.html文件中会包含日期信息Tue Apr 04 2017 23:25:58 GMT+0800 (中国标准时间)

在html文件中body标签中,输入如下代码,运行 npm run webpack

    <% for(var key in htmlWebpackPlugin){ %>
    <%= key %>
    <% } %>

生成的文件中会有files options,这两个值说明在htmlWebpackPlugin插件中存在这两个对象

继续遍历htmlWebpackPlugin.files htmlWebpackPlugin.options这两个对象

    <% for(var key in htmlWebpackPlugin.files){ %>
    <%= key %>:<%= JSON.stringify(htmlWebpackPlugin.files[key])%>
    <% } %>
    <% for(var key in htmlWebpackPlugin.options){ %>
    <%= key %>:<%= JSON.stringify(htmlWebpackPlugin.options[key])%>
    <% } %>

得到

    //files
    publicPath:""
    chunks:{"main":{"size":27,"entry":"js/main-c6074c5f07c44041cf45.js","hash":"ddd0a31267a8793ca2d8","css":[]},"a":{"size":14,"entry":"js/a-c6074c5f07c44041cf45.js","hash":"ef609b383ce569e49d38","css":[]}}
    js:["js/main-c6074c5f07c44041cf45.js","js/a-c6074c5f07c44041cf45.js"]
    css:[]
    manifest:
    //options
    template:"F:\\localhost\\wamp\\www\\webpack-demo\\node_modules\\._html-webpack-plugin@2.28.0@html-webpack-plugin\\lib\\loader.js!F:\\localhost\\wamp\\www\\webpack-demo\\index.html"
    filename:"index.html"    
    hash:false   
    inject:"head"    
    compile:true    
    favicon:false    
    minify:false    
    cache:true   
    showErrors:true   
    chunks:"all"   
    excludeChunks:[]   
    title:"webpack is good"  
    xhtml:false
    date:"2017-04-04T15:45:55.712Z"
//压缩
minify:{
    removeComments:true,//删除注释
    collapseWhitespace:true//删除空格
}

可以用<%= %>这种灵活的方式实现更多的个性化定制

  • 3-3自动化生成项目中的html文件(下)

多文件形式

var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        main: './src/script/main.js',
        a: './src/script/a.js',
        b: './src/script/b.js',
        c: './src/script/c.js'
    },
    output: {
        path: './dist',
        filename: 'js/[name]-[hash].js'
    },
    plugins: [
        new htmlWebpackPlugin({
            filename:'main.html',
            template: 'index.html',
            title: 'webpack is main',
            date: new Date()
        }),
        new htmlWebpackPlugin({
            filename:'a.html',
            template: 'index.html',
            title: 'webpack is a',
            date: new Date()
        }),
        new htmlWebpackPlugin({
            filename:'b.html',
            template: 'index.html',
            title: 'webpack is b',
            date: new Date()
        }),
        new htmlWebpackPlugin({
            filename:'c.html',
            template: 'index.html',
            title: 'webpack is c',
            date: new Date()
        })
    ]
}

chunks用来指定匹配的生成文件中应该生成数组中的文件(excludeChunks和chunks相反)

var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        main: './src/script/main.js',
        a: './src/script/a.js',
        b: './src/script/b.js',
        c: './src/script/c.js'
    },
    output: {
        path: './dist',
        filename: 'js/[name]-[hash].js'
    },
    plugins: [
        new htmlWebpackPlugin({
            filename:'main.html',
            template: 'index.html',
            title: 'webpack is main',
            date: new Date(),
            chunks:['a','b','c']
        }),
        new htmlWebpackPlugin({
            filename:'a.html',
            template: 'index.html',
            title: 'webpack is a',
            date: new Date(),
            chunks:['b','c']
        }),
        new htmlWebpackPlugin({
            filename:'b.html',
            template: 'index.html',
            title: 'webpack is b',
            date: new Date(),
            chunks:['a','c']
        }),
        new htmlWebpackPlugin({
            filename:'c.html',
            template: 'index.html',
            title: 'webpack is c',
            date: new Date(),
            chunks:['a','b']
        })
    ]
}

main.html中会生成 a.js b.js c.js
a.html中会生成b.js c.js
b.html中会生成a.js c.js
c.html中会生成a.js b.js

将生成的脚本变成内联脚本

compilation.assets[htmlWebpackPlugin.files.chunks.main.entry].source()

如果在申明publicPath的情况下代码应该是这样

compilation.assets[htmlWebpackPlugin.files.chunks.main.entry.substr(htmlWebpackPlugin.files.publicPath.length)].source()

htmlWebpackPlugin.files.publicPath.length 得到publicPath的长度例如 https://www.baidu.com
htmlWebpackPlugin.files.chunks.main.entry.substr()得到文件真实路径
最后用compilation.assets[].source()得到内容
在main.js已经以内联的方式插入到文档,那么多后续的出来main.js则不需要任何操作,可以在index.html里面写入这样的模板语法,来判断是否是main.js以外的文件,如果不是则插入

四、处理项目中的资源文件

  • 4-1什么是loader以及loader的特性

  • 4-2使用babel-loader转换ES6代码

webpack-demo
-dist
-node_modules
-src
--components
---layer
----layer.html
----layer.js
----layer.css
--app.js
-index.html
-package.json
-webpack.config.js
module:{
    loaders:[
        {
            test:'/\.js$/',
            loader:'babel',
            exclude:'./node_modules/',//提高打包速度
            include:'./src/',//提高打包速度
            query:{
                presets:['latest']
            }
        }
    ]
}

query用来指定额外的参数。presets:[‘latest’]用来指定babel将要处理js的版本,版本可能有如下几种或者更多中情况ES2015 ES2016 ES2017,latest指定最近的三个版本
presets:[‘latest’]也可以放在package.json文件中

"babel":{
    "presets":["latest"]
}

或者放在.babelrc中

{
    presets:["latest"]
}

path.resolve(__dirname+”),用来将相对路径改为绝对路径

cnpm install –save-dev babel-preset-latest
cnpm install –save-dev babel

注意:在webpack2.0中 有些不一样
npm install –save-dev babel-loader babel-core babel-preset-env

module: {
    rules: [
        {
            test:  /\.js$/,
            loader: 'babel-loader',
            exclude:  path.resolve(__dirname + 'node_modules'),
            include: path.resolve(__dirname + 'src'),
            query: {
                presets: ['env']
            }
        }
    ]
}

注意:加入include配置项会导致babel不处理es6语法,原因暂不明

  • 4-3处理项目中的css

postcss-loader
autoprefixer
autoprefixer是postcss-loader的一个子集

module: {
    rules: [{
            test: /\.js$/,
            loader: 'babel-loader',
            exclude: path.resolve(__dirname + 'node_modules'),
            query: {
                presets: ['env']
            }
        },
        {
            test: /\.css$/,
            use: [
                'style-loader',
                'css-loader?importLoaders=1',
                {
                    loader: 'postcss-loader',
                    options: {
                        plugins: function() {
                            return [
                                require('autoprefixer')
                            ];
                        }
                    }
                }
            ]
        }
    ]
}

loader的执行顺序从右向左
?importLoaders=1!是css-loader这个loader后面的参数,意思是在postcss-loader后制定一个处理import样式的命令

  • 4-4使用less和sass
    sass-loader less-loader

  • 4-5处理模板文件
    html-loader

  • 4-6处理图片及其他文件
    file-loader url-loader

var htmlWebpackPlugin = require('html-webpack-plugin');

var path = require('path');
module.exports = {
    entry: {
        "main": __dirname + '/src/script/main.js',
        "a": __dirname + '/src/script/a.js',
        "b": __dirname + '/src/script/b.js',
        "c": __dirname + '/src/script/c.js',
    },
    output: {
        filename: 'js/[name]-[hash].js',
        path: __dirname + '/dist',
    },
    module: {
        rules: [{
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: path.resolve(__dirname + 'node_modules'),
                query: {
                    presets: ['env']
                }
            },
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    {
                        loader:'css-loader',
                        options:{
                           importLoaders:1
                         }
                    },
                    {
                        loader: 'postcss-loader',
                        options: {
                            plugins: function() {
                                return [
                                    require('autoprefixer')
                                ];
                            }
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new htmlWebpackPlugin({
            filename: 'main.html',
            template: 'index.html',
            inject: false,
            title: 'webpack is main.html',
            date: new Date(),
            excludeChunks: ['a', 'b']
        }),
        new htmlWebpackPlugin({
            filename: 'a.html',
            template: 'index.html',
            inject: false,
            title: 'webpack is a.html',
            date: new Date(),
            excludeChunks: ['b', 'c']
        }),
        new htmlWebpackPlugin({
            filename: 'b.html',
            template: 'index.html',
            inject: false,
            title: 'webpack is b.html',
            date: new Date(),
            excludeChunks: ['a', 'c']
        }),
        new htmlWebpackPlugin({
            filename: 'c.html',
            template: 'index.html',
            inject: false,
            title: 'webpack is c.html',
            date: new Date(),
            excludeChunks: ['a', 'b']
        })
    ]
}
webpack3升级到webpack4优化打包 项目开发至今已有2年多,随着模块的不断迭代,打包的速度逐渐变慢,现在打包大约要用37分钟,这速度堪忧… 本文主要针对打包加速的2种思路: 1、在webpack3的基础上的打包优化 用DllPlugin插件加速打包,最后打包速度大约用9分钟 用happypack+webpack-parallel-uplift-plug-in多线程打包工具,最后打包速度大约在5分种 前面2种方式结合,打包速度能优化到4分钟 DllPlugin插件的配置: 步骤一:在build文件夹下,新建dll.config.js 阅读详情

相关推荐

单点DToF激光测距传感器各家产品的比较

汇总DToF 单点测距传感器的相关信息

Linux 设备驱动概述及开发环境构建 (一) 1772

webpack配置插件new HtmlWebpackPlugin()后报一大堆错

解决:target: "node",即可设置后webpack将会在node.js环境进行编译,才能读取引入的 require。

黎小小的博客 1315

从零搭建Synopsys EDA环境:Ubuntu系统下的完整安装与避坑指南

本文详细介绍了在Ubuntu系统下从零搭建Synopsys EDA环境的完整流程,包括系统配置、安装文件准备、核心工具安装、License配置及常见问题排查。特别针对数字IC设计场景,提供了VCS、Verdi、Design Compiler等EDA Tools的安装避坑指南和性能优化建议,帮助开发者高效搭建稳定的开发环境。

weixin_33738982的博客 491

webpack 中遇到的问题

PS C:\Users\86182\Desktop\webpack> npx webpack ./src/main.js [webpack-cli] Unknown command or entry './src/main.js' [webpack-cli] Run 'webpack --help' to see available commands and options 原因:没有找到入口文件, npx webpack ./src/main.js中 ./src/main.js和package.

qq_46030883的博客 2799

9 HAL库驱动框架简述(STM32HAL库)

HAL库外设的使用步骤总结如下:1、定义并填充xxx外设句柄结构体。2、如果遵循HAL库规范,通过HAL_xxx_MspInit()函数,实现外设底层资源的初始化,包括但不限于GPIO、时钟、DMA、中断等资源的初始化。3、调用HAL库的对应外设初始化函数,形如:HAL_xxx_Init()。4、初始化完成,开始使用外设。5、使用方法具体查看对应外设的HAL库驱动包中的说明:补充:HAL库使用主线外设初始化外设使用。

qq_25218501的博客 1980

An工具介绍之摄像头

An工具介绍之摄像头

人生得意须尽欢 6185

Module not found Error Can‘t resolve ‘core-jsmoduleses.promise.js‘ in

未安装core-js 在package.json所在目录 :npm i core-js -D ERROR in ./src/js/index.js 1:0-48 产环境配置15js兼容性处理srcjs' ERROR in ./src/js/index.js 2:0-39 Module not found: Error: Can't resolve 'core-js/modules/es.promise.js' in 'D:DesktopMy FilesRecentlyStudyWebPackdemo3.w

m0_67401228的博客 2162

什么是论文的创新点?公式化描述算是创新点吗?

写科研论文时,挑战之一就是如何让你的工作“脱颖而出”,也就是要有创新性。不管实验多么精确、推导多么复杂,若没有真正的创新,论文很可能会被拒。关于如何创新问题上,我最近在看刘雪峰老师的《科技论文写作指南》,看到了很多关于写作的新论述,在这里和大家进行分享。

加百力 的技术博客 1926

webpack5.27+vue2.6.12版本处理css文件以及.vue文件的<style>css模块

一. 问题背景 用如下命令加载依赖 cnpm install --save vue cnpm install --save-dev vue-loader cnpm install --save-dev vue-style-loader cnpm install --save-dev vue-template-compiler webpack中配置如下: var path = require('path'); //用插件 const MiniCssExtractPlugin = require('mini

成长之路 4941

干货|C#上位机与西门子PLC的Profinet协议通信开发(工控机版)

文章摘要: Profinet是西门子主导的工业以太网协议,支持实时通信(RT/IRT),广泛应用于PLC与工控机通信。本文聚焦C#上位机通过S7协议(集成于Profinet接口)高效访问西门子PLC(S7-1200/1500等),提供完整开发方案: 协议基础:解析Profinet三层架构(TCP/IP层、实时层、应用层),对比S7协议优势(开发便捷、跨平台); 开发实践:基于S7NetPlus/Snap7库实现数据读写,涵盖DB块、I/O点等地址规则; 环境配置:工控机(Windows/Linux/统信UO

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1213

新手必看!一步步教您如何获取可用的D音Cookie(为什么我复制的D音Cookie无法正常使用?)

新手必看!一步步教您如何获取可用的抖音Cookie(为什么我复制的抖音Cookie无法正常使用,无法下载无水印视频?)

XiaoqiangClub的博客 1491

160816、webpack 入门指南

什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX)、coffee、样式(含less/sass)、图片等都作为模块来使用和处理。 我们可以直接使用 require(XXX) 的形式来引入各模块,即使它们可能需要经过编译(比如JSX和sass),但我们无须在上面花费太多心思,因为 webpack 有着各种健全的加载器(loader)在...

weixin_30664051的博客 182

RK3399外设驱动之MIPI

RK3399外设驱动之MIPI 文章目录RK3399外设驱动之MIPIMIPI命令解析入口代码mipi显示配置实例rk3399mipi驱动rk mipi驱动注册过程rk32_mipi_dsi.c解析 内核版本 Linux4.4 平台 rk3399 作者 nineyole MIPI命令解析入口代码 MIPI的入口代码如下:kernel\drivers\video\rockchip\screen\lcd_mipi.c static int __init rk_mipi_screen_in

学无止境 2228

Webpack5 踩坑之(html-webpack-plugin)

2021 开工第一天就给我个大大的惊喜。 ERROR in Error: The loader "/home/project/vue3-demo/node_modules/html-webpack-plugin/lib/loader.js!/home/project/vue3-demo/public/index.html" didn't return html. - index.js:339 HtmlWebpackPlugin.evaluateCompilationResult [vu

vv_bug 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Webpack——Webpack简介

Webpack简介、安装、打包

码说芯语的博客 2258

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【webpack】webpack-dev-server的安装

爱爱爱

闫小样丶的博客 3818

关于 webpack 总结

关于 webpack 在windows安装总结 目录 关于 webpack 在windows安装总结 1、安装webpack 查看webpack的可用版本号 npm view webpack versions 安装指定版本的webpack npm install webpack@4.10.1 -g 2、安装webpack-cli 查看webp...

csp123258的专栏 1688

[webpack] webpack 从入门到 所有

官网地址 webpack中文 以server.js为接入点: 'use strict'; require('core-js/fn/object/assign'); const webpack = require('webpack'); const WebpackDevServer = require('webpack-dev-server'); const config = requir...

haliofwu的专栏 2348

【Webpack 进阶】Webpack 打包后的代码是怎样的?

webpack是我们现阶段要掌握的重要的打包工具之一,我们知道webpack会递归的构建依赖关系图,其中包含应用程序的每个模块,然后将这些模块打包成一个或者多个bundle。 那么webpack打包后的代码是怎样的呢?是怎么将各个bundle连接在一起的?模块与模块之间的关系是怎么处理的?动态import()的时候又是怎样的呢? 本文让我们一步步来揭开webpack打包后代码的神秘面纱 准备工作 创建一个文件,并初始化 mkdir learn-webpack-out...

wangxi06的专栏 1347

webpack4 升级至 webpack5 过程总结

本文章记录本次从webpack4框架升级为webpack5之后衍生出来的所有更改 框架主体为 zzy-javascript-frame(地址在文末) 此项目为自行开发构建,包含原 webpack4 版本 和升级后的 webpack5 版本 框架技术栈为 react、react-router、HOOK、react-redux(已安装,未使用)、antd-mobile(UI框架) 插件相关改动 ...

渣渣宇的博客 8892

webpack webpack-cli

ebpack 是一个静态的模块化打包工具,为现代的JavaScript应用程序服务打包 bundler:webpack可以帮助我们进行打包,所以它是一个打包工具静态的static:将代码打包成最终的静态资源(部署到静态服务器)模块化module:webpack默认支持各种模块化开发,ES Module、CommonJS、AMD等现代modern:前端开发的各种问题,催生了webpack的出现webpack 从 4.0 版本开始,在安装时,就必须要安装这两个东西。

qq_30436011的博客 4030

史上最全webpack带你深入了解webpack

史上最全webpack带你深入了解webpack

m0_62371650的博客 2470

webpack 解决unexpected token export_Webpack 教程:加载 JavaScript

Webpack 默认支持 ES2015 的模块定义,但是在进行代码转换的时候,像const这样的语法并不会被转换。这样的话,在一些老旧浏览器中就会产生很多问题。为了能更好的理解 Webpack 的默认输出,我们将 Webpack 的mode参数设置为none, 然后观察一下构建输出:dist/main.js.../***/ ((__unused_webpack_module, ...

weixin_32642109的博客 1951

webpack性能构建优化

webpack4 引入了 mode 模式,可以配置开发和生产模式,就可以使用一些已经默认好的插件帮我们达到想做的效果

不想学习的打工人的博客 1716

【webpack】 webpack的安装

1, 新建目录,执行npm init。

菜就多练 4234

webpack-cli 在 webpack 打包中的作用

webpack 是一个静态的模块化打包工具,为现代的JavaScript应用程序服务打包 bundler:webpack可以帮助我们进行打包,所以它是一个打包工具静态的static:将代码打包成最终的静态资源(部署到静态服务器)模块化module:webpack默认支持各种模块化开发,ES Module、CommonJS、AMD等现代modern:前端开发的各种问题,催生了webpack的出现webpack 安装 webpack 从 4.0 版本开始,在安装时,就必须要安装这两个东西。webpack 是打包

老司机的后备箱 608
上一篇: JS操作iframe里的dom
下一篇: ES6语法实现模板编译
chentian888
博客等级 码龄11年 16粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值