1.html-webpack-plugin

  该插件可以帮助我们生成一个简单的html模板,常用的参数:

    filename:生成的模板名称,例如index.html;

    template:如果想使用自定义的html模块,可以通过该参数指定自定义的模板路径及文件名;

    title: 用来生成页面的 title 元素;

    inject: true | 'head' | 'body' | false  ,注入所有的资源到特定的 template 或者 templateContent 中,如果设置为 true 或者 body,所有的 javascript 资源将被放置到 body 元素的底部,'head' 将放置到 head 元素中;

    favicon: 添加特定的 favicon 路径到输出的 HTML 文件中;

    minify: {} | false , 传递 html-minifier 选项给 minify 输出;

    hash: true | false, 如果为 true, 将添加一个唯一的 webpack 编译 hash 到所有包含的脚本和 CSS 文件,对于解除 cache 很有用;

    cache: true | false,如果为 true, 这是默认值,仅仅在文件修改之后才会发布文件;

    showErrors: true | false, 如果为 true, 这是默认值,错误信息会写入到 HTML 页面中;

    chunks: 允许只添加某些块 (比如,仅仅 unit test 块);

    chunksSortMode: 允许控制块在添加到页面之前的排序方式,支持的值:'none' | 'default' | {function}-default:'auto';

    excludeChunks: 允许跳过某些块,(比如,跳过单元测试的块) ;

    主要作用是在release时,自动向index.html 文件中写入 <script>xx/xx/bundle.js</script>。

output: {
path: __dirname + "/",//代表webpack 打包后的文件保存路径
filename: 'bundle.js', //打包文件的名称
publicPath: './' //打包后的bundle.js文件,在写入index.html中时,<script></script>中的路径,如 <script type="text/javascript" src="./bundle.js"></script>
                //如果publicPath:'./home',script的src 为 ./home/bundle.js
} plugins: [
new HtmlWebpackPlugin({
filename: './index.html', //需要写入的文件路径及名称
template: './index.html',
inject: "body", //注入到html的那个节点上
hash: true
})
]

2.resolve

  a.extensions:自动补全模块后缀,如果require的时候没有写后缀名,会根据这里配置的参数去匹配查找;

  b.alias:指定模块的别名,该功能优先执行。如果你想重新定向某个模块的引用路径,可以使用alias,改参数值是键值对,key指定模块名称,value为重定向模块的路径,例如:

  alias:{
    moment:path.join(__dirname,'/node_modules/moment/min/moment-with-locales.js')
  }

这样,在js中使用require('moment'),将直接在path.join(__dirname,'/node_modules/moment/min/moment-with-locales.js') 下读取模块内容。

3.module的noParse

  该参数值为数组,指定数组中值对应的模块不被webpack扫描;换句话说,如果你 确定一个模块中没有其它新的依赖 就可以配置这项, webpack 将不再扫描这个文件中的依赖。

4.webpack.DllPlugin 和 webpack.DllReferencePlugin 优化启动速度

  原理:通过webpack.DllPlugin 预先将不会经常发生变动的js/或者第三方库打包成一个js文件,然后通过wepack.DllReferencePlugin 加载刚才打包好的js文件,这样加载js文件不需要再次编译,直接使用,大大提升了webpack启动的速度。

  使用方法:

    a.创建webpack.dll.config.js ,该文件与普通的webpack.config.js文件差不多,主要是将需要打包的库文件提取出来,简要code如下:

const webpack = require('webpack'),
path = require('path');
// 设置需要打包的文件数组
const vendors = [
'jquery',
'angular',
'lodash',
'angular-route',
'angular-ui-bootstrap',
'bootstrap',
'bootstrap-loader'
]; module.exports = {
output: {
filename: '[name].dll.js',
path: path.resolve(__dirname, './app/assets/dll'),
library: "[name]"
},
entry: {
vendor: vendors,
}, module: { //
loaders: [{
test: /\.json$/,
loader: "json"
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015']
}
},
{
test: /\.scss$/,
loader: 'style!css!postcss!sass',
exclude: /node_modules/,
},
{
test: /\.html$/,
loader: 'html-loader',
exclude: /node_modules/
},
{
test: /bootstrap\/dist\/js\/umd\//,
loader: 'imports?jQuery=jquery'
},
{
test: /\.(eot|woff|woff2|ttf|svg|png|jpe?g|gif)(\?\S*)?$/,
loader: 'file'
}
]
}, plugins: [ new webpack.ProvidePlugin({
jQuery: 'jquery',
$: 'jquery',
jquery: 'jquery'
}),
    //核心配置,path知道打包后的文件存放位置,与output 位置一致
new webpack.DllPlugin({
path: path.resolve(__dirname, './app/assets/dll/[name]-manifest.json'),
name: "[name]"
}),
      //压缩打包文件
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
],
};

    b:在webpack.config.js 的plugin中引入打包好的js,路径与之前保持一致;

new webpack.DllReferencePlugin({
context: __dirname + "",
manifest: require('./app/assets/dll/vendor-manifest.json')
}),

    c:在index.html 中通过script标签引入打包好的dll文件,如<script src="assets/dll/vendor.dll.js"></script>

  注意事项:通过预打包的方式提升启动速度,这个方法效果非常好,一般能提升50%左右的速度,但是,在使用过程中,可能会遇到以下问题:

    a:external 文件不存在,改问题主要是通过script 指定的文件不存在或者路径设置有问题,请检查路径配置是否正确;

    b:如果路径配置正确,但是还是报错提示找不到,可能是webpack-server的启动路径设置不应,检查 content-base 后面的路径是否与预期一致

webpack 学习笔记的更多相关文章

  1. 【原】webpack学习笔记

    之前在react的项目中有用过webpack,不过没有认真的去研究,这段时间又重新好好的学习一下webpack,发觉 webpack是一个很强大的东西.而且很好用,方便,接下来主要是做一下学习的笔记 ...

  2. 更博不能忘——webpack学习笔记

    webpack是前端构建系统就像grunt和gulp(之前有学习过grunt所以也就大概明白webpack是个什么东西),所以说前端技术大部分还真是相通的,现在觉得当时多看的东西并不白费,虽然长时间不 ...

  3. webpack学习笔记(二)-- 初学者常见问题及解决方法

    这篇文章是webpack学习第二篇,主要罗列了本人在实际操作中遇到的一些问题及其解决方法,仅供参考,欢迎提出不同意见. 注:本文假设读者已有webpack方面相关知识,故文中涉及到的专有名词不做另外解 ...

  4. webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件

    一 .webpack学习环境准备: 1:window系统 2:安装node.js  官方网址 下载好后下一步下一步安装即可 安装步骤略过....... 3:nrm的安装 打开cmd命令控制台 输入:n ...

  5. Webpack学习笔记九 webpack优化总结

    webpack 优化笔记 webpack4 自带的优化包括 swingTree(摇摆树)和作用域提升 swingTree 比如入口文件 index.js引入通用方法 util, 里面有 10个方法, ...

  6. Webpack学习笔记一:What is webpack

      #,Loaders干嘛的,webpack can only process JavaScript natively, but loaders are used to transform other ...

  7. webpack学习笔记—webpack安装、基本配置

    文章结构: 什么是webpack? 安装webpack 'webpack基本配置 一.什么是webpack? 在学习react时发现大部分文章都是react和webpack结合使用的,所以在学reac ...

  8. 【webpack学习笔记】a04-建立开发环境

    开发环境就是在开发过程中为了方便配置的环境,生产环境就是开发完成即将上线的情况. 好了,说了句废话,切入正题. 在开发时,打包后的文件压缩成一团,报错调试的时候傻眼了有木有?每次做出修改需要到浏览器查 ...

  9. Webpack 学习笔记总结

    Webpack安装 Linux系统默认已经安装了node&npm,但版本比较低,而且没法升级,可以重新下载Node然后通过软链接替换系统自带的node和npm; ln -s /path_to/ ...

  10. webpack学习笔记丁点积累

    webpack是什么? https://webpack.js.org/concepts/ https://code.tutsplus.com/tutorials/introduction-to-web ...

随机推荐

  1. eclipse中Maven创建WEB项目

    刚刚学到Maven的时候总是容易忽视到一些创建Maven项目是的步骤, 这里记录笔者熟悉一种,直接创建Maven Project 下面开始吧--- 选择web-app,没得说,然后那些groupID ...

  2. node.js 入门实例【转】

    第1章 一个简单的博客 nswbmw edited this page 14 days ago · 38 revisions Pages 29 Home FAQ 番外篇之——使用 _id 查询 番外篇 ...

  3. oracle 笔试题

    ORACLE笔试题一.单选题1.在Oracle中,以下不属于集合操作符的是( ). A. UNION B. SUM C. MINUS D. INTERSECT2.在Oracle中,执行下面的语句:SE ...

  4. Hadoop:操作 Hadoop Cluster

    启动Hadoop 当完成所有的必要配置后,将HADOOP_CONF_DIR目录中的所有配置文件复制到所有机器,建议将HDFS和YARN后台进程一不同的用户身份运行,比如运行HDFS进程们的用户为hdf ...

  5. php生成随机密码的几种方法

    方法一: 1.在 33 – 126 中生成一个随机整数,如 35,2.将 35 转换成对应的ASCII码字符,如 35 对应 #3.重复以上 1.2 步骤 n 次,连接成 n 位的密码 该算法主要用到 ...

  6. Silverlight5 Tools安装失败及解决方案

    Silverlight5 Tools在安装的时候往往会提示以下错误 解决办法:解压Silverlight5 Tools.exe,打开ParameterInfo.xml文件,将其中的1033全部替换为2 ...

  7. LA 4329 Ping pong 树状数组

    对于我这样一名脑残ACMer选手,这道题看了好久好久大概4天,终于知道怎样把它和“树状数组”联系到一块了. 树状数组是什么意思呢?用十个字归纳它:心里有数组,手中有前缀. 为什么要用树状数组?假设你要 ...

  8. 关于缺少nvToolsExt64_1.lib时的PhysX的处理

    我本人之所以缺少这个文件是因为我的PhysX如果你的PhysX是从UE4源代码中提取的,那么可能会出现如下错误,提示找不到nvToolsExt64_1.lib(本机是64bit的操作系统) 那就执行u ...

  9. java第六次作业

    一个抽奖程序:用ArrayList类和random类 import java.awt.*; import javax.swing.*; import java.awt.event.; import j ...

  10. Mysql索引的类型和优缺点

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.注:[1]索引不是万能的!索引可以加快数据检索操作,但会使数据修改操作变慢.每修改数据 ...