webpack如何打包js

webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。本文主要和大家介绍了webpack打包js的方法,在代码实践之前,先说一写webpack的基础知识。

1、为什要使用WebPack

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

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

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

Scss,less等CSS预处理器

2、什么是Webpack

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

3、WebPack和Grunt以及Gulp相比有什么特性

其实Webpack和另外两个并没有太多的可比性,Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack可以替代Gulp/Grunt类的工具。

Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,这个工具之后可以自动替你完成这些任务。

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

webpack如何打包js

Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。

webpack如何打包js

从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。

如果实在要把二者进行比较,Webpack的处理速度更快更直接,能打包更多不同类型的文件。

接下来我们简单为大家介绍
Webpack如何将多个js文件合并(注意这里只是文件的合并,即将多个写好的js合成一个js文件,以减少http请求)。

安装webpack

在安装 Webpack 前,你本地环境需要支持 node.js。安装node.js可以参考node官方文档。

使用如下命令在全局安装webpack。

$ npm install webpack -g

登录后复制

webpack已经安装到计算机上,现在可以使用webpack命令了。

在项目中使用webpack

使用以下命令在项目根目录下生成package.json文件。

$ npm init

登录后复制

安装webpack到项目中

将webpack加入到pageage.json配制文件中,使用以下命令:

$ npm install --save-dev webpack

登录后复制

此时再看package.json文件,对比package.json刚刚创建时,新增加了一段代码。

webpack如何打包js

webpack打包的两种方式

webpack entry output (命令行)

webpack -config webpack.conf.js (指定webpack的配置文件)

使用命令行打包js

一:创建两个js文件

创建app.js, sum.js,sum.js导出一个加法的函数,app.js使用这个函数。

// app.jsimport {sum} from './sum';console.log('sum(21, 22)', sum(21, 22));// sum.jsexport function sum(a, b) {  return a + b;}

登录后复制

二:使用webpack命令打包

在当前目录下使用: webpack app.js bundle.js ; 这里入口是app.js, 输出文件是bundle.js,这样就会看到文件中多出一个bundle.js文件。

创建一个html文件运行,引入bundle.js运行,控制台会打印:sum(21, 22) 43 。

使用webapck的配置文件打包(还是上面的两个js文件)

创建一个webpack.conf.js,编写wepack的配置文件

// 配置文件使用commonjs规范module.exports = {  // 入口,是一个对象  entry: {    app: './app.js'  },  // 输出  output: {    // 带五位hash值的js    filename: '[name].[hash:5].js'  }}

登录后复制

在命令行输入:webpack –config webpack.conf.js,发现生成了一个app.dd1c6.js带hash的js文件。将这个js文件引入HTML里面发正常输出:sum(21, 22) 43

配置文件的命名为webpack.config.js,则直接在命令行输入webpack就可以。

webapck配合babel打包ES6、7

在项目根目录安装bable-loader和babel-core,babel-preset

使用npm init生成一个配置文件

npm install babel-loader babel-core –save-dev

新建app.js,index.html,webpack.config.js等文件

编写webpack.config.js

安装babel-preset来指定编译的版本:npm install babel-preset-env –save-dev

在app.js里面随便写一些ES6的语法

使用命令行输入webpack进行编译

webpack配置文件

// 配置文件使用commonjs规范module.exports = {  // 入口,是一个对象  entry: {    app: './app.js' // 相对路径  },  // 输出  output: {    // 带五位hash值的js    filename: '[name].[hash:8].js'  },  // 指定loader  module: {    // rules中的每一项是一个规则    rules:[      {        test: /.js$/, // 值一个正则,符合这些正则的资源会用一个loade来处理        use: {          loader: 'babel-loader', // 使用bable-loader来处理          options: { // 指定参数            presets: [              ['babel-preset-env', {                targets: {                  browsers: ['> 1%', 'last 2 version'] //具体可以去babel-preset里面查看                }               }]                          ] // 指定哪些语法编译          }        },        exclude: '/node_module/' // 排除在外      }    ]  }}

登录后复制

app.js和编译之后带hash的js

// app.jslet func = () => {};const num = 30;let arr = [3, 4, 5, 6];let newArr = arr.map(item => item * 2); // 将以前数组每一项*2console.log(newArr);// ==================//// 编译之后(直接截取了编译的代码)"use strict";var func = function func() {};var num = 30;var arr = [3, 4, 5, 6];var newArr = arr.map(function (item) { return item * 2;}); // 将以前数组每一项*2console.log(newArr);

登录后复制

babel的两个插件:Babel Polyfill 和 Babel Runtime Transform

用来处理一些函数和方法(Genertor,Set,Map,Array.from等未被babel处理,需要上面的两个插件)

Babel Polyfill(全局垫片),npm install babel-polyfill –save, 使用:import “babel-polyfill”;

Babel Runtime Transform(为开发框架准备),npm install babel-plugin-transform-runtime –save, npm install babel-runtime –save

新建一个.babelrc来进行配置

app.js里面新增代码

import "babel-polyfill";let func = () => {};const num = 30; let arr = [3, 4, 5, 6];let newArr = arr.map(item => item * 2); // 将以前数组每一项*2console.log(newArr);// 需要babel-polyfillarr.includes(8);// Genertor 函数function* func2() {}

登录后复制

webpack配置

// 配置文件使用commonjs规范module.exports = {  // 入口,是一个对象  entry: {    app: './app.js' // 相对路径  },  // 输出  output: {    // 带五位hash值的js    filename: '[name].[hash:8].js'  },  // 指定loader  module: {    // rules中的每一项是一个规则    rules:[      {        test: /.js$/, // 值一个正则,符合这些正则的资源会用一个loade来处理        use: {          loader: 'babel-loader', // 使用bable-loader来处理          options: { // 指定参数                      }        },        exclude: '/node_module/' // 排除在外      }    ]  }}

登录后复制

.babelrc文件配置

{  "presets": [    ["babel-preset-env", {      "targets": {        "browsers": ["> 1%", "last 2 version"]      }     }]   ],  "plugins": ["transform-runtime"]}

登录后复制

相关推荐:

webpack打包之后的文件过大如何解决

webpack打包器的简单介绍

vue-cli快速构建vue应用并实现webpack打包详解

以上就是webpack如何打包js的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2783148.html

(0)
上一篇 2025年3月8日 16:44:55
下一篇 2025年3月8日 16:45:04

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Require.js详解

    这次给大家带来require.js详解,使用require.js详解的注意事项有哪些,下面就是实战案例,一起来看一下。 index.html nbsp;html>                    body        //将r…

    编程技术 2025年3月8日
    200
  • 讲解react.js中经常出现的问题以及解决方法

    React.js 是一个帮助你构建页面 UI 的库,我们对react.js经常出现的问题都做了一个总结,大家对react.js感兴趣的或者是不太了解的都可以参考一下哦!废话少说进入主题! 一、为什么return内多加一个标签后无法就无法再渲…

    编程技术 2025年3月8日
    200
  • webpack的使用详解

    这次给大家带来webpack的使用详解,使用webpack的注意事项有哪些,下面就是实战案例,一起来看一下。 1.安装 //全局安装npm install -g webpack//安装到你的项目目录npm install –save-de…

    编程技术 2025年3月8日
    200
  • react.js中的三元运算讲述

    本篇文章是关于react.js中的三元运算,对于react.js中的三元运算不熟悉或者是不了解的,我们可以一起来看看本篇文章!废话不那么多直接进入主题吧! 一.三元运算 //在js中定义一个style属性,可参见reactjs(一)var …

    编程技术 2025年3月8日
    200
  • class="no-js"是什么意思

    这次给大家带来class=”no-js”是什么意思,使用class=”no-js”的注意事项有哪些,下面就是实战案例,一起来看一下。 首先,确认no-js 是配合 Modernizr 一起使用…

    编程技术 2025年3月8日
    200
  • react.js实现动态字体颜色切换讲述

    本篇文章讲述了react.js是如何实现动态字体颜色切换的,大家对于react.js实现动态字体颜色切换不太熟悉的同学可以和我们一起来看看本篇文章,废话少说,我们直接看看react.js是如何实现动态字体颜色切换的吧! 有两种方式来实现动态…

    编程技术 2025年3月8日
    200
  • js实现网页搜索框关键字提示

    在我们逛网站的时候经常会遇到搜索框之类的,我们在输入想要搜索的内容时,下面会弹出来一些提示,而这样的操作,我们用JavaScript既可以实现,下面我们来讲解一下如何实现的吧! 写这个功能的时候,细节方面比较讲究,稍微不注意点页面就会出现各…

    2025年3月8日
    200
  • javaScript容易被忽略的知识点

    这次给大家带来javascript容易被忽略的知识点,javascript容易被忽略知识点的注意事项有哪些,下面就是实战案例,一起来看一下。 1.获取对象所有键: var arr = [‘a’, ‘b’, ‘c’];Object.keys(…

    编程技术 2025年3月8日
    200
  • js函数和变量的提升及闭包讲解

    本文主要和大家分享两个重要的知识点,函数和变量的提升和闭包的原理用法详解,希望能帮助到大家。 函数和变量的提升 原理:就是函数及变量的声明都将被提升到函数的最顶部。 结果:变量和函数都支持先试用后声明 案例: //变量提升x = 5; //…

    编程技术 2025年3月8日
    200
  • JavaScript的数组使用集合

    这次给大家带来javascript的数组使用集合,javascript数组使用集合的注意事项有哪些,下面就是实战案例,一起来看一下。 1.join() 将数组中的所有元素转化为字符串并连接在一起 var a=[1,2,3,4];a.join…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论