webpack学习简单总结

webpack使用总结:

入门使用:

这个报错说明需要安装相应的Loader,并在引用时指定相应的loader

执行成功如图:

chunk指相应的区块。

要是css引入正确:必须引入css-loader,要使改变的css生效,要引入style-loader;

各个js的函数调用只能在各自的函数中写,引入只是合并的意思,但并不能直接使用引入的js的函数。

而且style-loader要写在css-loader的前面,否则报如下错误。

执行成功之后,css插入到了head标签里。

loader正确顺序:”style-loader!css-loader!./style.css”

loader的加载顺序是从右向左加载,所以

loader正确顺序::style-loader!css-loader!postcss-loader!less-loader

sass-loader或者less-loader等语言预编译loader在webpack中的位置为:

1.最先放sass-loader或者less-loader

2.postcss-loader

3.css-loader

4.style-loader

 

注意:如果一个css中import导入另一个css,另一个css的postcss-loader没生效,这时要给css-loader加一个参数,指定import导入css的数量:

loader:’style-loader!css-loader?importLoaders=1!postcss-loader’

为了使用简便,不能每次在引入css的时候加loader,则可以在命令中实现:

webpack hello.js bundle.js --module-bind ‘css=style-loader!css-loader‘

去掉模块引入css时加入的loader,1.x可以,3.0依旧会报错。

--watch

在命令后面加 --watch ,可以不用每次改动都执行命令,而是自动改变

注意:修改了webpack配置需要重启,即即使设置了监听也要手动重新编译;

关于版本安装问题:把想要安装的npm 模块的名称和版本号写在package.json的依赖里,然后npm install就会自动安装

但是,每次输入很多命令依旧很繁琐,解决办法:

如果要提前配置好输入的webpack命令,则在package.json中的script下,定义一个webpack属性,后面定义所有要输入的webpack的命令,定义好之后,在命令窗口 运行 命令 npm run webpack即可,定义方式与定义npm run dev中的dev是一样的。

--progress  查看打包过程

--display-modules 查看打包的模块

--colors  打包后的命令加颜色区分

--display-reasons 显示打包原因

--watch 自动监听文件改变,若改动,自动打包,但是修改webpack配置需重新手动编译。

webpack 配置文件

报错:

output输出的路径写成这样:

而不是这样:

webpack打包完成之后,显示打包成功,但是并没有生产打包的文件和文件夹,所以这里在path中切记首先要写__dirname+“路径”

如图:

个人理解:如果写成 __dirname+”/path”,则说明现在还没有要放入的js的文件夹,这样会自动创建,否则即使执行成功,但是会看不到打包后的js文件,如果已经提前创建好要打包的js的存放文件夹,则不需要写__dirname. 【常见问题】

如果更改了入口文件的数量,比如变成数组形式,或者对象形式,则需要重新手动运行npm run webpack。

数组:用数组形式写多个入口文件,则会合并成指定的一个打包之后的文件

对象:分别打包成多个文件

注意:一个chunk代表一个区块,则不同的chunk会打包成不同的文件,如果output写死成一个路径,则打包之后第二个区块会覆盖第一个区块,解决办法,chunkname+hash作为占位,则有几个区块就打包成几个区块 filename: "[name]-[hash].js"

报错原因:入口文件的路径写成了单引号套双引号,所以不识别。

hash值可以理解为版本号,只有文件发生改变时,hash值才会变化。

hash值对静态资源的版本管理很有用。

webpack插件

npm安装该插件

npm install 插件名 --save-dev

一个很好用的webpack插件:html-webpack-plugin

安装

npm install html-webpack-plugin --save-dev

使用:

首先在webpack.config.js中引入该插件,

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

然后只需要在webpack配置中modules增加属性plugins,用来初始化插件。

写法如下:

plugins: [
new htmlWebpackPlugin() 
]

如果要把自己的html页面打包到对应的打包文件夹下:则给该插件映射一个模版:

plugins: [
new htmlWebpackPlugin({
template:”index.html”
})
]

如果html页面想要输出到打包文件夹最外层目录,然后js等文件要输出到js对应的文件夹下,则output输出的时候把js路径单独配置到对应的目录下的filename就可以。

代码如图:

output: {
        filename: "js/[name]-[hash].js",
        path: __dirname+"/dist"
},

输出的文件结构如图:

插件的属性:

plugins: [
        new htmlWebpackPlugin({
            filename:"index-[hash].html",
            template:‘index.html‘,
            inject:"head",
            title:"我是title",
            date:new Date(),
        })
]

通过在plugins中定义的属性和值,可以在页面中用<%=  %>模版引擎的方式展现出来。

eg:<%= htmlWebpackPlugin.options.title %>

并且可以取到值之后进行for循环

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

通过遍历files和options可以看到插件对应的都有哪些属性,这样页面中如果有多个js,一些想放到头部,一些像放到body中,就可以直接在页面中以模板引擎的方式引入js了。

eg: <script type=”text/javascript src=”<%= htmlWebPackPlugin.files.chunks.main.entry %>”>

[此时inject要记得设为false]

minify:压缩 【具体可参照官网 www.npmjs.com 中的htmp-webpack-plugin】

多页面配置:chunk:[]

plugin是一个数组,如果要打包成多个页面,只需写多个创建插件对象的实例,给每个实例里写chunk属性,该属性是一个数组,每个数组里对应的js的名称。

excludeChunks:[]    除一些以外

处理模板文件的loader

安装loader方法:

npm  install  xxx-loader  --save-dev

首先安装html-loader:

npm  install  html-loader  --save-dev

在webopack.config.js中配置该loader

1. 首先写好自己的html代码,

<div style="background-color:red;width:100%;height:100%">
    <h1>模板文件处理 测试</h1>
</div>
2. 然后再对应的js中import导入该html文件,
import tpl from ‘../layer.html‘;
function layer() {
    return {
        name:‘layer‘,
        tpl:tpl
    };
}
export default layer;

3. 然后去App.js中导入该js文件,

4. 最后在App.js中渲染到index.html中

import Layer from ‘./layer.js‘;
const App = function () {
    var dom = document.getElementById(‘app‘);
    var Layer = new Layer();
    dom.innerHTML = Layer.tpl;
};
new App();

有关html-loader的具体代码,参见官网templating……

对于复杂的模板引擎,安装ejs-loader

后缀格式可以是.tpl/.ejs

当引入tpl的模板文件的时候,返回的不是一个字符串,是一个function

webpack配置:

{
    test:/\.ejs$/,
    loader:‘ejs-loader‘
 },

app.js

import Layer from ‘./src/js/layer.js‘;
const App = function () {
    var dom = document.getElementById(‘app‘);
    var layer = new Layer();
    dom.innerHTML = layer.tpl({
        name:‘John‘,
        arr:["1111","2222","3333"]
    });
};
new App();

layer.tpl

<div>
    <div>this is <%= name %> layer</div>
    <% for (var i = 0;i < arr.length; i++) { %>
        <%= arr[i] %>
    <% } %>
</div>

[webpack 3.0 报错]bundle.js:84 Uncaught TypeError: Cannot set property ‘innerHTML‘ of null

处理图片及其他文件的loader

file-loader

安装loader

npm install file-loader --save-dev

webpack配置

{
     test:/\.(png|jpg|gif|svg)$/,
     loader:‘file-loader‘
 },

无论是在根目录下的Index.html中直接引用(绝对路径没有问题,相对问题可以被解析),还是css中背景图片引用,亦或者是在模版文件中引用,在file-loader的作用下,都成功被解析。在模版引擎文件中,src可以以require(“相对路径”) 的形式 引入,就可以成功引入,但是直接引用相对地址就不可以解析。

url-loader:

当图片小于指定大小的时候,使用url-loader,当大于指定大小的时候,自动转换为file-loader

{
   test:/\.(png|jpg|gif|svg)$/,
   loader:‘url-loader‘,
   query:{
         limit:20000, //指定大小 ,单位kb
   name:"src/[name]-[hash:5].[ext]"
  }
 },

image-webpack  loader

图片压缩loader

时间: 2024-10-10 05:22:24

webpack学习简单总结的相关文章

webpack学习(五)—webpack+react+es6

如果你看过webpack学习系列的前一个文章,接下来做的东西会比较简单 :webpack学习(四)- webpack-dev-server react发展的很快,现在大部分开发react相关的项目,都会用到这个组合:webpack+react+es6 还是以一个项目举例,项目中的package.json是生成的,"devDependencies"都是自己安装加入,如果拷贝网上的资料,可以npm install直接生成.而为了一探react的具体开发流程,还是自己一个个安装比较好. 项目

webpack学习记录(十)-跨域

webpack学习记录(十)-跨域 准备工作 建一个简单的服务端 const express = require('express') let app = express() app.get('/api/user', (req,res) => { res.json({msg:'服务器启动'}) ) app.listen(3000) 发送一个请求 let xhr = new XMLHttpRequest() xhr.open('get','/api/user',true) xhr.onload =

webpack学习笔记一

webpack.gulp.grunt是前端打包功能工具:因为已经学习了gulp,而最近发现webpack很火,于是着手学习webpack.本篇是webpack学习笔记系列的第一篇,欢迎指教. 我是从慕课网以及官网文档相结合的方式学习的,从官方文档学到的第一个知识点是在使用webpack打包过程中,即使没有webpack.config,js这个文件也是可以的. 首先是全局安装webpack,cmd(如果是window系统,在任意位置)执行命令: npm install --g webpack或cn

spring4.0.6最新稳定版新特性学习,简单学习教程(一)

Spring Framework 4.0 学习整理. Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法.这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果.为了程序员的幸福,我认为有必要来一套简单快速的官方

webpack学习笔记八

webpack自动刷新浏览器 webpack开发服务器,是webpack官方提供的一个辅助开发工具,它可以自动监控项目下的文件,一旦有修改保存的操作,它就会自动执行打包命令,将我们的代码重新打包,并且需要的话还可以刷新浏览器. 首先我们安装webpack-dev-server 在CMD中安装执行npm intall webpack-dev-server -g 在项目目录执行安装依赖命令: npm install --save-dev webpack-dev-server 其中webpack-de

HTML DOM学习------简单介绍

DOM:w3c文档对象模型. 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容.结构和样式. HTML DOM :定义了所有 HTML 元素的对象和属性,以及访问它们的方法. 换言之,HTML DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准. DOM节点:HTML文档中所有内容都是节点: 整个文档是一个文档节点: 每个HTML元素是一个元素节点: HTML元素内的文本是一个文本节点: 每个HTML属性是一个属性节点: 注释是注释节点: HTML DOM将HTM

webpack学习笔记

webpack笔记 webpack学习笔记 1.全局安装 npm install webpack -g 2.作为项目依赖安装 npm install webpack --save-dev 3.安装css-loader.sass-loader.node-scss npm install css-loader sass-loader node-scss --save-dev 4.webpack配置 // webpack.config.js var path = require('path'); mo

学习简单绘图DrawNode

学习简单绘图DrawNode 尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=1738 绘图的方式有两种: 使用OpenGL的绘图原语DrawPrimitives. 使用DrawNode. 本节中主要学习使用DrawNode来进行图形的绘制. [小知识] 分段数:即绘制曲线一般都是通过绘制“样条曲线”来实现,而分段数即样条段数. 二次贝塞尔曲线:起点终点之间的一条抛物线,利用一个控制点来控制抛物线的形状. 三次贝塞尔曲线:起点终点之间,利用两个控制点来

webpackの学习笔记2

code spliting 代码分割 可以选择加载项目当时只需要的文件 loader  模块是通过loader处理各种各样的文件,如js文件.css文件.图片 模块的打包器 安装webpack mkdir webpack-test  //建立webpack-test文件夹 cd webpack-test    //进入webpack-test文件夹 npm init          //npm初始化 npm install webpack –save-dev  //在当前文件夹下安装webpa