webpack打包jquery多页_用webpack打包老网站(jquery切图)或重构浅谈!

news/2024/5/13 4:18:56/文章来源:https://blog.csdn.net/weixin_39788969/article/details/111733362

随着前端技术的快速发展,前端技术栈也越来越复杂多样了。什么是webpack?他能干些啥?

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。

现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包。为了简化开发的复杂度,前端社区涌现出了很多好的实践方法

模块化,让我们可以把复杂的程序细化为小的文件;

类似于TypeScript这种在JavaScript基础上拓展的开发语言:使我们能够实现目前版本的JavaScript不能直接使用的特性,并且之后还能转换为JavaScript文件使浏览器可以识别;

Scss,less等CSS预处理器

这些改进确实大大的提高了我们的开发效率,但是利用它们开发的文件往往需要进行额外的处理才能让浏览器识别,而手动处理又是非常繁琐的,这就为WebPack类的工具的出现提供了需求。

很多框架都整合了webpack去打包发布项目,目前熟悉的就是用vue全家桶+webpack打包一个项目。最近两天,因工作空闲,倒腾了下用webpack去打包之前用jquery切的老网站。详情如下:

1、安装吊炸天的Node.js和npm(Node.js的包管理工具),安装完成后在命令行输入node -v 和 npm -v查看对应的版本号,则说明安装成功。

2、新建一个文件夹whitegold,利用npm或cnpm安装webpack

//先全局安装

npm install -g webpack

//安装到你的项目目录

npm install --save-dev webpack

3、安装完成后,在whitegold目录已经生成了一个node_modules的文件夹,里面都是webpack依赖包。然后创建package.json文件,这是一个标准的npm说明文件,里面蕴含了丰富的信息,包括当前项目的依赖模块,自定义的脚本任务等等。执行命令npm init,输入这个命令后,终端会问你一系列诸如项目名称,项目描述,作者等信息,不过不用担心,如果你不准备在npm中发布你的模块,这些问题的答案都不重要,回车默认即可。

4、在文件夹内新建src文件夹, 在src下新建子文件夹css、img、js、view文件夹,在css目录下新建common、lib、page文件夹,在js目录下新建common、page文件夹,最终的目录结构如下

5、在lib文件夹新建reset.css,在page目录下新建style.less公共样式。在js下的page目录下新建index.js,article.js,list.js三个js文件,在view目录下新建index.html, list.html, article.html三个静态页面。里面可以写一些测试代码。因为博主把其三个html文件的公共头部和底部提取出来,所以目录结构如下:

6、创建webpack.config.js配置文件,这个配置文件其实也是一个简单的JavaScript模块,我们可以把所有的与打包相关的信息放在里面。我们在其中写入如下所示的简单配置代码,目前的配置主要涉及到的内容是入口文件路径和打包后文件的存放路径。基本的配置内容如下:

var path = require(‘path’);

var webpack = require(‘webpack’);

var autoprefixer = require(‘autoprefixer’);

var HtmlWebpackPlugin = require(‘html-webpack-plugin’);

var ExtractTextPlugin = require(‘extract-text-webpack-plugin’);

module.exports = {

entry: { //配置入口文件,有几个写几个

index: ‘./src/js/page/index.js’,

list: ‘./src/js/page/list.js’,

article: ‘./src/js/page/article.js’,

},

output: {

path: path.join(__dirname, ‘public’), //输出目录的配置,模板、样式、脚本、图片等资源的路径配置都相对于它

publicPath: ‘/public/’, //模板、样式、脚本、图片等资源对应的server上的路径

filename: ‘js/[name].js’, //每个页面对应的主js的生成配置

chunkFilename: ‘js/[id].chunk.js’ //chunk生成的配置

},

devServer: {

contentBase: ‘./’,

host: ‘localhost’,

port: 9090, //默认8080

inline: true, //可以监控js变化

historyApiFallback: true,//不跳转

hot: true //热启动

},

module: {

loaders:[

{

test: /\.js$/,

loader: ‘babel-loader?presets=es2015’

},{

test: /\.css$/,

use: ExtractTextPlugin.extract({ fallback: “style-loader”, use: [“css-loader”] })

},{

test: /\.less/,

use: ExtractTextPlugin.extract({ fallback: “style-loader”, use: [“css-loader”, “autoprefixer-loader”, “less-loader”] })

},{

//html模板加载器,可以处理引用的静态资源,默认配置参数attrs=img:src,处理图片的src引用的资源

//比如你配置,attrs=img:src img:data-src就可以一并处理data-src引用的资源了,就像下面这样

test: /\.html$/,

loader: “html-loader?attrs=img:src img:data-src”

},{

//文件加载器,处理文件静态资源

test: /\.(woff|woff2|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,

loader: ‘file-loader?name=./fonts/[name].[ext]’

},{

//图片加载器,雷同file-loader,更适合图片,可以将较小的图片转成base64,减少http请求

//如下配置,将小于8192byte(8KB)的图片转成base64码

test: /\.(png|jpg|gif)$/,

loader: ‘url-loader?limit=8192&name=./img/[hash:5].[ext]’

}

]

},

externals: { // 遇到require这些时, 不需要再编译. 适合那些常用的库, 已经在页面通过

jquery: ‘jQuery’,

},

plugins: [

// new webpack.ProvidePlugin({ //加载jq

// $: ‘jquery’,

// jQuery: ‘jquery’

// }),

newwebpack.optimize.CommonsChunkPlugin({

name: ‘ymsj’, // 将公共模块提取,生成名为`ymsj`的chunk

chunks: ‘all’, //提取哪些模块共有的部分

minChunks: 3 // 提取至少3个模块共有的部分

}),

newExtractTextPlugin(‘css/[name].css’),//单独使用link标签加载css并设置路径,相对于output配置中的publickPath

newHtmlWebpackPlugin({//根据模板插入css/js等生成最终HTML

favicon: ‘./src/img/favicon.ico’, //favicon路径,通过webpack引入同时可以生成hash值

filename: ‘./view/index.html’, //生成的html存放路径,相对于path

template: ‘./src/view/index.html’, //html模板路径

inject: ‘body’, //js插入的位置,true/’head’/’body’/false

hash: true, //为静态资源生成hash值

chunks: [‘ymsj’, ‘index’],//需要引入的chunk,不配置就会引入所有页面的资源

minify: { //压缩HTML文件

removeComments: false, //移除HTML中的注释

collapseWhitespace: false //删除空白符与换行符

}

}),

newHtmlWebpackPlugin({//根据模板插入css/js等生成最终HTML

favicon: ‘./src/img/favicon.ico’, //favicon路径,通过webpack引入同时可以生成hash值

filename: ‘./view/list.html’, //生成的html存放路径,相对于path

template: ‘./src/view/list.html’, //html模板路径

inject: true, //js插入的位置,true/’head’/’body’/false

hash: true, //为静态资源生成hash值

chunks: [‘ymsj’, ‘list’],//需要引入的chunk,不配置就会引入所有页面的资源

minify: { //压缩HTML文件

removeComments: true, //移除HTML中的注释

collapseWhitespace: false //删除空白符与换行符

}

}),

newHtmlWebpackPlugin({//根据模板插入css/js等生成最终HTML

favicon: ‘./src/img/favicon.ico’, //favicon路径,通过webpack引入同时可以生成hash值

filename: ‘./view/article.html’, //生成的html存放路径,相对于path

template: ‘./src/view/article.html’, //html模板路径

inject: true, //js插入的位置,true/’head’/’body’/false

hash: true, //为静态资源生成hash值

chunks: [‘ymsj’, ‘article’],//需要引入的chunk,不配置就会引入所有页面的资源

minify: { //压缩HTML文件

removeComments: true, //移除HTML中的注释

collapseWhitespace: false //删除空白符与换行符

}

}),

newwebpack.BannerPlugin(‘白山羊案例V2.0.0 2017-9 Wginit ‘),

newwebpack.optimize.OccurrenceOrderPlugin(),

newwebpack.optimize.UglifyJsPlugin(),

newwebpack.HotModuleReplacementPlugin()//热加载

],

};

注意上面的loaders写法,因为随着webpack版本不断变化,某些写法上也有很大的不同,本文用的是less-loader来编译less,用autoprefixer来补充兼容前缀,特别注意下面的写法!!

lazy_loading.gif

6、详细配置package.json文件,安装页面渲染等各种loaders,package.json内容如下:

{

“name”: “test”,

“version”: “2.0.0”,

“description”: “白山羊webpack打包案例”,

“main”: “index.js”,

“dependencies”: {

“autoprefixer-loader”: “^3.2.0”,

“autoprefixer”: “^7.1.3”,

“babel-core”: “^6.26.0”,

“babel-loader”: “^7.1.2”,

“babel-preset-es2015”: “^6.24.1”,

“babel-preset-stage-0”: “^6.24.1”,

“css-loader”: “^0.28.7”,

“extract-text-webpack-plugin”: “^3.0.0”,

“file-loader”: “^0.11.2”,

“html-loader”: “^0.5.1”,

“html-webpack-plugin”: “^2.30.1”,

“less”: “^2.7.2”,

“less-loader”: “^4.0.5”,

“postcss-loader”: “^2.0.6”,

“style-loader”: “^0.18.2”,

“url-loader”: “^0.5.9”,

“webpack”: “^3.5.5”,

“webpack-dev-server”: “^2.7.1”,

“jquery”: “1.11.1”

},

“scripts”: {

“test”: “echo \”Error: no test specified\” && exit 1″,

“start”: “webpack”,

“server”: “webpack-dev-server –open”

},

“author”: “Wginit”,

“license”: “ISC”,

“devDependencies”: {

“copy-webpack-plugin”: “^4.0.1”,

“html-webpack-plugin”: “^2.30.1”

}

}

配置完成后,在命令行输入webpack或者npm start (因为在package.json中的scripts下已经定义)

1-300x171.pnglazy_loading.gif

ok,出现以上目录结构可说明打包成功!打开根目录whitegold文件夹,发现当中已新生成了一个public文件夹,对的,此文件夹就是打包后的静态资源文件夹,之后打包发布的就是它了。图片文件名都以其hash值前五位来命名,对低于8k的图片都转base64来减少http请求。

7、打包完成后,执行npm run server,如下图所示:

lazy_loading.gif

ok,执行没错误后,node服务器会在浏览器中自动打开网页,并以我们自定义的9090端口监听,完成后的3个页面如下:

11-2-300x154.png   12-1-300x167.pnglazy_loading.gif

检查元素可以看到已打包的静态文件都已插入到对应的html页面中。

lazy_loading.gif

结尾:再次强调下,webpack打包支持环境IE9+(想兼容ie7、8的就别来试了,虽说有插件可以去弄(可以参考https://github.com/zuojj/fedlab/issues/5),但坑超级多,耗不起,还是老老实实的用jq切图吧~!),已上,欢迎各路大牛拍砖矫正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_773619.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各类数据集网站收集

来源于:https://www.jianshu.com/p/42697d0d2fc1 1.Mall Dataset: http://personal.ie.cuhk.edu.hk/~ccloy/downloads_mall_dataset.html 2.ShanghaiTech https://pan.baidu.com/s/1nuAYslz WorldExpo 10 This paper is in cooperation with Shangha…

【服务器架构】十张图带你了解大型网站架构

目录 1、初始阶段的网站架构 2、应用服务和数据服务分离 3.使用缓存改善网站性能 4、使用应用服务器集群改善网站的并发处理能力 5、数据库读写分离 6、使用反向代理和CDN加上网站相应 7、使用分布式文件系统和分布式数据库系统 8、使用NoSQL和搜索引擎 9、业务拆分 …

Ping计算机名和Ping网站域名都是由DNS解析吗?

背景 最近公司换了一台打印机,在终端上添加扫描的时候主机名输入计算机名报错“连接超时”,但是将主机名改为IP后就可以“正常连接”了。在处理这个问题的时候首先想到的就是DNS、wins等服务器IP没配置导致不能解析计算机名所致。 引言 通过给打印机配…

IE退役,建议使用IE的网站如何打开,Edge接力。

微软宣布将于美国当地时间6月15日(北京时间6月16日),停止对IE( Internet Explorer)浏览器的所有支持和更新,为这款服务用户超过27年的浏览器画上句号。未来,将由微软推出的Edge浏览器接棒。 尽管…

学习-安全类网站

SeEBug: https://www.seebug.org/ Sebug安全文档: http://old.sebug.net/paper/ OWAPS: http://www.owasp.org.cn/owasp-project 欢迎关注公众号:

大型网站架构:负载均衡(1)

面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分…

大型网站架构:负载均衡(2)

大型网站架构系列:负载均衡详解(2) 本文是负载均衡详解的第一篇文章,介绍负载均衡算法, 硬件负载均衡。部分内容摘自读书笔记。 三、负载均衡算法 常用的负载均衡算法有,轮询,随机&#xff0…

大型网站架构系列:负载均衡详解(3)

一、软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有Nginx,Lvs,HaProxy等。本文参考大量文档&a…

大型网站架构系列:负载均衡详解(4)

本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法。具体参考文章,详见最后的链接。 三、LVS负载均衡 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于19…

开发实用网站收藏

1,BootCDN https://www.bootcdn.cn/ 2,Can I Use https://caniuse.com/ 检查浏览器兼容性 3,代码压缩 https://tool.oschina.net/jscompress/ 4,url编码解码等 http://www.bejson.com/enc/urlencode/#6

大型网站架构之系列(1)——纵观历史演变(上)

我们知道一个网站都是随着业务的发展,逐渐演变成几万服务器,几亿用户数的大型网站,经历了若干年,甚至上十年的 发展成为大型网站,然而真正亲身经历这个发展过程的人已经不多了,这种人也是拿着公司股票&…

大型网站架构之系列(2)——纵观历史演变(下)

这篇文章本来准备前几天就得写的,谁也没想到这段时间公司的RC太多了,含酸苦逼的加班,加班。。。所以在大一点的公司上班, 写代码的责任心一定要强,或许就因为你的一些小bug,给公司带来不少损失。。。这在以…

大型网站架构之系列(3)——死了都要说的缓存

说到缓存,我想大家跟我一样都很兴奋,当我们遭遇网站性能瓶颈的时候,缓存是一剂强心针,也是一粒紧急妈富隆,从而在优化网站 性能方面冠上了第一定律的帽子,我们前年在做淘应用的时候,就遭遇了性…

大型网站架构之系列(4)——分布式中的异步通信

我们知道在面向对象编程中,总会想着各种办法来实现代码的解耦,从而让项目中的各种人员面对自己熟悉的业务进行开发, 做到术业有专攻,比如大家非常熟悉的三层架构,MVC,MVP以及MVVM模式,让前端设…

练习英文发音的网站

https://youglish.com/pronounce/nio/english?

java反序列化getshell,上海东方汇融多个网站存在Java反序列化漏洞致使多个网站Getshell涉及大量客户信息 | CN-SEC 中文网...

1.东方宝缴费系统#/u57fa/u7840/u914d/u7f6e:jdbc.driveroracle.jdbc.driver.OracleDriverjdbc.urljdbc:oracle:thin:192.168.10.12:1521:occpayjdbc.usernameportaljdbc.passwordportal-0982.企业控制平台jdbc.driverClassNameoracle.jdbc.driver.OracleDriverdbserverurljdbc…

php 支付宝验签失败,thinkphp网站支付宝异步回调验签失败问题

下面由thinkphp框架教程栏目给大家介绍thinkphp网站支付宝异步回调验签失败问题,希望对需要的朋友有所帮助!手头一个项目,用到了支付宝手机网站支付,项目用tp做的,下载支付宝SDK后修改后调起正常,同步接口也…

网站服务器 蜜罐,linux web服务器蜜罐系统

linux web服务器蜜罐系统 内容精选换一换Atlas 800 训练服务器(型号 9000)安装上架、服务器基础参数配置、安装操作系统等操作请参见《Atlas 800 训练服务器 用户指南 (型号9000, 风冷)》或《Atlas 800 训练服务器 用户指南 (型号9000, 液冷)》。Atlas 800 训练服务器(型号 900…

云服务优缺点_角点科技:建外贸网站用阿里云还是wordpress好?

建外贸网站用阿里云还是wordpress好?外贸网站更适合用wordpress,但是阿里云更加适合新手,因为新手用wordpress搭建网站还是蛮难的,接下来角点科技的小编就来大家分享一下阿里云和wordpress的优缺点,具体选择哪个还是可…