webpack模块化管理和打包工具使用详解

这次给大家带来webpack模块化管理和打包工具使用详解,webpack模块化管理和打包工具使用的注意事项有哪些,下面就是实战案例,一起来看一下。

Webpack简介

webpack是当下最热门的前端资源模块化管理和打包工具。 它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际

需要的时候再异步加载。通过 loader  的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。

模块系统的演进标签


登录后复制

这是最原始的 JavaScript 文件加载方式,如果把每一个文件看做是一个模块,那么他们的接口通常是暴露在全局作用域下,也就是定义在 window  对象中,

不同模块的接口调用都是一个作用域中,一些复杂的框架,会使用命名空间的概念来组织这些模块的接口,典型的例子如 YUI  库。

这种原始的加载方式暴露了一些显而易见的弊端:

全局作用域下容易造成变量冲突

文件只能按照   的书写顺序进行加载

开发人员必须主观解决模块和代码库的依赖关系

在大型项目中各种资源难以管理,长期积累的问题导致代码库混乱不堪

CommonJS规范

CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中。

CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过 module.exports  导出对外的变量 或接口,通过   require()  来导入其他模块的输出到当前模块作用域中。

一个直观的例子

// moduleA.jsmodule.exports = function( value ){  return value * 2;}// moduleB.jsvar multiplyBy2 = require('./moduleA');var result = multiplyBy2(4);

登录后复制

AMD规范

AMD(异步模块定义)是为浏览器环境设计的,因为 CommonJS 模块系统是同步加载的,当前浏览器环境还没有准备好同步加载模块的条件。

模块通过 define  函数定义在闭包中,格式如下:

define(id?: String, dependencies?: String[], factory: Function|Object);

登录后复制

id  是模块的名字,它是可选的参数。

factory  是最后一个参数,它包裹了模块的具体实现,它是一个函数或者对象。如果是函数,那么它的返回值就是模块的输出接口或值。

一些用例

定义一个名为 myModule  的模块,它依赖   jQuery  模块:

define('myModule', ['jquery'], function($) {  // $ 是 jquery 模块的输出  $('body').text('hello world');}); // 使用 require(['myModule'], function(myModule) {});

登录后复制

注意 :在 webpack 中,模块名只有局部作用域,在 Require.js 中模块名是全局作用域,可以在全局引用。

定义一个没有 id  值的匿名模块,通常作为应用的启动函数:

define(['jquery'], function($) {  $('body').text('hello world');});

登录后复制

AMD 也采用require()语句加载模块,但不同于CommonJS,他要求两个参数

第一个参数[module],是一个数组,里面的成员就是要加载的模块; 第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:

math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境

目前,主要有两个Javascript库实现了AMD规范: require.js 和 curl.js

 require(['math'], function (math) {    math.add(2, 3);  });

登录后复制

什么是 Webpack

Webpack 是一个模块打包器。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

Webpack 的特点

代码拆分

Loader

智能解析

插件系统

快速运行

webpack基本使用

创建项目根目录

初始化

npm init 或 npm init -y

登录后复制

全局安装

npm install webpack -g

登录后复制

局部安装,在项目目录下安装

npm install webpack --save-dev

登录后复制

–save: 将安装的包的信息保存在package中

–dev:开发版本,只是项目构建的时候使用,项目构建完成后并不依赖的文件

如果使用web开发工具,单独安装

npm install webpack-dev-server --save-dev

登录后复制

基本使用

首先创建一个静态页面 index.html 和一个 JS 入口文件 entry.js:

登录后复制

创建entry.js

// entry.js : 在页面中打印出一句话document.write('It works.')

登录后复制

然后编译 entry.js并打包到 bundle.js文件中

// 使用npm命令 webpack entry.js bundle.js

登录后复制

使用模块

1.创建模块module.js,在内部导出内容

module.exports = 'It works from module.js'

登录后复制

2.在entry.js中使用自定义的模块

//entry.jsdocument.write('It works.')document.write(require('./module.js')) // 添加模块

登录后复制

加载css模块

1.安装css-loader

npm install css-loader style-loader --save-dev

登录后复制

2.创建css文件

//style.cssbody { background: yellow; }

登录后复制

3.修改 entry.js:

require("!style-loader!css-loader!./style.css") // 载入 style.cssdocument.write('It works.')document.write(require('./module.js'))

登录后复制

创建配置文件webpack.config.js

1.创建文件

var webpack = require('webpack')module.exports = { entry: './entry.js', output: {  path: dirname,  filename: 'bundle.js' }, module: {  loaders: [    //同时简化 entry.js 中的 style.css 加载方式:require('./style.css')   {test: /.css$/, loader: 'style-loader!css-loader'}  ] }}

登录后复制

2.修改 entry.js 中的 style.css 加载方式:require(‘./style.css’)

3.运行webpack

在命令行页面直接输入webpack

插件使用

1.插件安装

//添加注释的插件npm install --save-devbannerplugin

登录后复制

2.配置文件的书写

var webpack = require('webpack')module.exports = {  entry: './entry.js',  output: {    path: dirname,    filename: 'bundle.js'  },  module: {    loaders: [      //同时简化 entry.js 中的 style.css 加载方式:require('./style.css')      {        test: /.css$/,        loader: 'style-loader!css-loader'      }    ],    plugins: [      //添加注释的插件      new webpack.BannerPlugin('This file is created by zhaoda')    ]  }}

登录后复制

3.运行webpack

// 可以在bundle.js的头部看到注释信息/*! This file is created by zhaoda */

登录后复制

开发环境

webpack

–progress : 显示编译的进度

–colors : 带颜色显示,美化输出

–watch : 开启监视器,不用每次变化后都手动编译

12.4.7.1. webpack-dev-server

开启服务,以监听模式自动运行

1.安装包

npm install webpack-dev-server -g --save-dev

登录后复制

2.启动服务

实时监控页面并自动刷新

webpack-dev-server --progress --colors

登录后复制

自动编译

1.安装插件

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

登录后复制

2.在配置文件中导入包

var htmlWebpackPlugin = require('html-webpack-plugin')

登录后复制

3.在配置文件中使用插件

plugins: [    //添加注释的插件    new webpack.BannerPlugin('This file is created by zhaoda'),    //自动编译    new htmlWebpackPlugin({      title: "index",      filename: 'index.html', //在内存中生成的网页的名称      template: './index.html' //生成网页名称的依据    })  ]

登录后复制

4.运行项目

webpack--save-dev

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

vue-cli项目中使用bootstrap步骤详解

vue事件机制使用详解

以上就是webpack模块化管理和打包工具使用详解的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月8日 11:29:39
下一篇 2025年3月8日 11:29:44

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

相关推荐

  • webpack搭建ReactApp步骤详解

    这次给大家带来webpack搭建ReactApp步骤详解,webpack搭建ReactApp的注意事项有哪些,下面就是实战案例,一起来看一下。 npm install -g create-react-appcreate-react-app …

    2025年3月8日
    200
  • webpack打包文件体积超大解决思路

    这次给大家带来webpack打包文件体积超大解决思路,解决webpack打包文件体积超大的注意事项有哪些,下面就是实战案例,一起来看一下。 优化对比 :   未优化前:index.html引入一个main.js文件,体积2M以上。   优化…

    编程技术 2025年3月8日
    200
  • webpack热刷新与热加载使用详解

    这次给大家带来webpack热刷新与热加载使用详解,webpack热刷新与热加载使用的注意事项有哪些,下面就是实战案例,一起来看一下。 webpack非常的强大,合理的脚手架可以为我们的工作省去众多繁琐无意义的工作。其中热刷新、热加载相较于…

    编程技术 2025年3月8日
    200
  • webpack模块热替换使用详解

    这次给大家带来webpack模块热替换使用详解,webpack模块热替换使用的注意事项有哪些,下面就是实战案例,一起来看一下。 全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net…

    2025年3月8日 编程技术
    200
  • webpack自动刷新使用详解

    这次给大家带来webpack自动刷新使用详解,webpack自动刷新使用的注意事项有哪些,下面就是实战案例,一起来看一下。 前端需要频繁的修改js和样式,且需要根据浏览器的页面效果不断的做调整;而且往往我们的开发目录和本地发布目录不是同一个…

    2025年3月8日 编程技术
    400
  • webpack移动端自动化构建rem步骤详解

    这次给大家带来webpack移动端自动化构建rem步骤详解,webpack移动端自动化构建rem的注意事项有哪些,下面就是实战案例,一起来看一下。 相信很多小伙伴想着自己的移动端项目能够自动转换为rem,这才符合前端的潮流,如果用自己手写或…

    编程技术 2025年3月8日
    200
  • webpack源码中loader机制使用须知

    这次给大家带来webpack源码中loader机制使用须知,webpack源码中loader机制使用的注意事项有哪些,下面就是实战案例,一起来看一下。 loader概念 loader是用来加载处理各种形式的资源,本质上是一个函数, 接受文件…

    编程技术 2025年3月8日
    200
  • AngularJS模块化应用

    这次给大家带来AngularJS模块化应用,AngularJS模块化应用的注意事项有哪些,下面就是实战案例,一起来看一下。 一.模块化的好处 (1)实现逻辑更清晰、可读性强;(2)团队开发分工明确,容易控制;(3)充分利用可以重用代码;(4…

    编程技术 2025年3月8日
    200
  • vue cli升级webpack4步骤详解

    这次给大家带来vue cli升级webpack4步骤详解,vue cli升级webpack4的注意事项有哪些,下面就是实战案例,一起来看一下。 webpack4 released 已经有一段时间了,插件系统趋于平稳,适逢对webpack3的…

    编程技术 2025年3月8日
    200
  • webpack脚手架优化使用

    这次给大家带来webpack脚手架优化使用,webpack脚手架优化使用的注意事项有哪些,下面就是实战案例,一起来看一下。 优化类目 样式分离 第三方资源分离 区分开发环境 热更新 提取公共代码 1. CSS分离 npm install e…

    2025年3月8日
    200

发表回复

登录后才能评论