webpack2 基础入门详解(二)

本文详细介绍了webpack2的基础知识,包括npm安装区别、脚本命令、全局变量process.env.NODE_ENV、resolve.extensions配置、CommonsChunkPlugin抽取公共代码、CopyPlugin转移静态文件、Webpack-dev-server的使用、require.ensure实现按需加载、多配置文件原因、HashedModuleIdsPlugin的缓存优化及HtmlWebpackPlugin的使用注意事项。内容实用,适合webpack初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 区分npm install xxx –save 与 –save -dev

开发环境与线上环境所需要的依赖包不一样,比如在npm build打包文件通过babel-loader转译es6->原生js。而在打包文件之后并不需要babel了。

–save:将依赖的模块放进package.json文件中”dependencies”中,代表线上环境还会依赖该模块。
–save-dev:将依赖的模块放进package.json文件中”devDependencies”中。

2. npm run dev一些脚本命令哪儿来的

执行webpack:webpack-dev-server –config webpack.dev.config.js – progress –colors –hot –inline

执行一次都要输入这么多代码…
其实有个捷径,直接通过package.json文件中”script”用更简单的代码替换复杂的。输入npm run dev即可执行webpack。

// package.json
"script": {
  "dev": "webpack-dev-server --config webpack.dev.config.js -- progress --colors --hot --inline"
}

脚本命令 - 参考链接:npm scripts 使用指南

3. 全局变量process.env.NODE_ENV哪里来的?作用是什么?

来源:通过webpack内置的DefinedPlugin插件。
这里写图片描述
作用:在开发环境中通常会log、warning更易于调试。而在线上的时候并不需要这些信息,从而减少一些代码量。通过这个变量,任意js文件中可以判断此时是开发环境还是线上环境。

//举个例子
const dev = process.env.NODE_ENV
if(dev === 'production'){
    console.log('...')
}


4. 后缀名自动补全 resolve.extensions

通常在react框架中可以省略js、css后缀名,是在这儿配置的。
这里写图片描述

5. 抽取入口文件中指定的文件公共代码 CommonsChunkPlugin
6. 直接转移静态文件 CopyPlugin
7. 轻量级node.js服务器 Webpack-dev-server

如果直接打开一个index.html文件,url是ftp协议开头..

可以用webpack-dev-server构建一个轻量级服务器,这样可以通过localhost:端口号访问资源。

使用命令webpack-dev-server –hot –inline还可以完成自动刷新

注:只能解决一些问题,但无法替代node服务器

8. 按需加载 require.ensure

注:要实现按需加载,必须在webpack.config.js中先定义好chunkFilename

9. 为什么有多个webpack配置文件?

在开发环境下可能我们运用的是webpack.dev.config.js,而在打包放到线上的时候,我们可能运用的是webpack.config.js。

我所了解的是…在开发的时候,可能我们会将所有文件(自己写的业务代码、第三方依赖的库等等)输出一个budle.js文件,会需要热加载。
但是放到线上等时候,我们并不需要热加载。会将自己写的业务代码与第三方依赖库分开,输出多个文件。分开输出的好处就是…自己写的代码可能需要不停的更改,但是第三方库在一段时间内是不会变的。这样有利于用户缓存。

10. 缓存优化 HashedModuleIdsPlugin

filename: ‘[name]-[chunkhash:6].js’导致业务代码和第三方库代码的chunkhash一致。这样业务代码发生变化,第三方库代码的chunkhash也会随着变化,这样起不到缓存的作用。

//解决的方法
new webpack.HashedModuleIdsPlugin(),

new webpack.optimize.CommonsChunkPlugin({
    name: 'runtime'
}),
11. 自动引入打包文件 HtmlWebpackPlugin

在第一篇中已经讲过,但是还要补充一点。

即使chunks指定了顺序,但是它并不会根据指定的顺序来引入js文件。

这里写图片描述

解决办法:

//引入orderByList,并在chunkSortMode中执行
var orderByList = function (list) {
    return function (chunk1, chunk2) {
        var index1 = list.indexOf(chunk1.names[0]);
        var index2 = list.indexOf(chunk2.names[0]);
        if (index2 == -1 || index1 < index2) {
            return -1;
        }
        if (index1 == -1 || index1 > index2) {
            return 1;
        }
        return 0;
    };
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值