首页

文章

webpack中是什么意思?有什么用?如何用

发布网友 发布时间:2022-04-20 04:42

我来回答

1个回答

热心网友 时间:2023-06-26 03:23

  1. 为什么用 webpack?
  他像 Browserify, 但是将你的应用打包为多个文件. 如果你的单页面应用有多个页面, 那么用户只从下载对应页面的代码. 当他么访问到另一个页面, 他们不需要重新下载通用的代码.
  他在很多地方能替代 Grunt 跟 Gulp 因为他能够编译打包 CSS, 做 CSS 预处理, 编译 JS 方言, 打包图片, 还有其他一些.
  它支持 AMD 跟 CommonJS, 以及其他一些模块系统, (Angular, ES6). 如果你不知道用什么, 就用 CommonJS.
  2. Webpack 给 Browserify 的同学用
  对应地:
  browserify main.js > bundle.js

  webpack main.js bundle.js

  Webpack 比 Browserify 更强大, 你一般会用 webpack.config.js 来组织各个过程:
  // webpack.config.js
  mole.exports = {
  entry: './main.js',
  output: {
  filename: 'bundle.js'
  }
  };

  这仅仅是 JavaScript, 可以随意添加要运行的代码.
  3. 怎样启动 webpack
  切换到有 webpack.config.js 的目录然后运行:
  webpack 来执行一次开发的编译
  webpack -p for building once for proction (minification)
  webpack -p 来针对发布环境编译(压缩代码)
  webpack --watch 来进行开发过程持续的增量编译(飞快地!)
  webpack -d 来生成 SourceMaps
  4. JavaScript 方言
  Webpack 对应 Browsserify transform 和 RequireJS 插件的工具称为 loader. 下边是 Webpack 加载 CoffeeScript 和 * JSX-ES6 的配置(你需要 npm install jsx-loader coffee-loader):
  // webpack.config.js
  mole.exports = {
  entry: './main.js',
  output: {
  filename: 'bundle.js'
  },
  mole: {
  loaders: [
  { test: /\.coffee$/, loader: 'coffee-loader' },
  { test: /\.js$/, loader: 'jsx-loader?harmony' } // loaders 可以接受 querystring 格式的参数
  ]
  }
  };

  要开启后缀名的自动补全, 你需要设置 resolve.extensions 参数指明那些文件 Webpack 是要搜索的:
  // webpack.config.js
  mole.exports = {
  entry: './main.js',
  output: {
  filename: 'bundle.js'
  },
  mole: {
  loaders: [
  { test: /\.coffee$/, loader: 'coffee-loader' },
  { test: /\.js$/, loader: 'jsx-loader?harmony' }
  ]
  },
  resolve: {
  // 现在可以写 require('file') 代替 require('file.coffee')
  extensions: ['', '.js', '.json', '.coffee']
  }
  };

  5. 样式表和图片
  首先更新你的代码用 require() 加载静态资源(就像在 Node 里使用 require()):
  require('./bootstrap.css');
  require('./myapp.less');

  var img = document.createElement('img');
  img.src = require('./glyph.png');

  当你引用 CSS(或者 LESS 吧), Webpack 会将 CSS 内联到 JavaScript 包当中, require() 会在页面当中插入一个 `<style>标签. 当你引入图片, Webpack 在包当中插入对应图片的 URL, 这个 URL 是由require()` 返回的.
  你需要配置 Webpack(添加 loader):
  // webpack.config.js
  mole.exports = {
  entry: './main.js',
  output: {
  path: './build', // 图片和 JS 会到这里来
  publicPath: 'http://mycdn.com/', // 这个用来成成比如图片的 URL
  filename: 'bundle.js'
  },
  mole: {
  loaders: [
  { test: /\.less$/, loader: 'style-loader!css-loader!less-loader' }, // 用 ! 来连接多个人 loader
  { test: /\.css$/, loader: 'style-loader!css-loader' },
  {test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'} // 内联 base64 URLs, 限定 <=8k 的图片, 其他的用 URL
  ]
  }
  };

  6. 功能开关
  有些代码我们只想在开发环境使用(比如 log), 或者 dogfooging 的服务器里边(比如内部员工正在测试的功能). 在你的代码中, 引用全局变量吧:
  if (__DEV__) {
  console.warn('Extra logging');
  }
  // ...
  if (__PRERELEASE__) {
  showSecretFeature();
  }

  然后配置 Webpack 当中的对应全局变量:
  // webpack.config.js

  // definePlugin 接收字符串插入到代码当中, 所以你需要的话可以写上 JS 的字符串
  var definePlugin = new webpack.DefinePlugin({
  __DEV__: JSON.stringify(JSON.parse(process.env.BUILD_DEV || 'true')),
  __PRERELEASE__: JSON.stringify(JSON.parse(process.env.BUILD_PRERELEASE || 'false'))
  });

  mole.exports = {
  entry: './main.js',
  output: {
  filename: 'bundle.js'
  },
  plugins: [definePlugin]
  };

  然后你在控制台里用 BUILD_DEV=1 BUILD_PRERELEASE=1 webpack 编译. 注意一下因为 webpack -p 会执行 uglify dead-code elimination, 任何这种代码都会被剔除, 所以你不用担心秘密功能泄漏.
  7. 多个进入点(entrypoints)
  比如你用 profile 页面跟 feed 页面. 当用户访问 profile, 你不想让他们下载 feed 页面的代码. 因此你创建多个包: 每个页面一个 "main mole":
  // webpack.config.js
  mole.exports = {
  entry: {
  Profile: './profile.js',
  Feed: './feed.js'
  },
  output: {
  path: 'build',
  filename: '[name].js' // 模版基于上边 entry 的 key
  }
  };

  针对 profile, 在页面当中插入 <script src="build/Profile.js"></script>. feed 页面也是一样.
  8. 优化共用代码
  feed 页面跟 profile 页面共用不要代码(比如 React 还有通用的样式和 component). Webpack 可以分析出来他们有多少共用模块, 然后生成一个共享的包用于代码的缓存.
  // webpack.config.js

  var webpack = require('webpack');

  var commonsPlugin =
  new webpack.optimize.CommonsChunkPlugin('common.js');

  mole.exports = {
  entry: {
  Profile: './profile.js',
  Feed: './feed.js'
  },
  output: {
  path: 'build',
  filename: '[name].js'
  },
  plugins: [commonsPlugin]
  };

  在上一个步骤的 script 标签前面加上 <script src="build/common.js"></script> 你就能得到廉价的缓存了.
  9. 异步加载
  CommonJS 是同步的, 但是 Webpack 提供了异步指定依赖的方案. 这对于客户端的路由很有用, 你想要在每个页面都有路由, 但你又不像在真的用到功能之前就下载某个功能的代码.
  声明你想要异步加载的那个"分界点". 比如:
  if (window.location.pathname === '/feed') {
  showLoadingState();
  require.ensure([], function() { // 语法奇葩, 但是有用
  hideLoadingState();
  require('./feed').show(); // 函数调用后, 模块保证在同步请求下可用
  });
  } else if (window.location.pathname === '/profile') {
  showLoadingState();
  require.ensure([], function() {
  hideLoadingState();
  require('./profile').show();
  });
  }

  Webpack 会完成其余的工作, 生成额外的 chunk 文件帮你加载好.
  Webpack 在 HTML script 标签中加载他们时会假设这些文件是怎你的根路径下. 你可以用 output.publicPath 来配置.
  // webpack.config.js
  output: {
  path: "/home/proj/public/assets", // path 指向 Webpack 编译能的资源位置
  publicPath: "/assets/" // 引用你的文件时考虑使用的地址
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 为什么使用webpack webpack执行机制流程是怎么样的 webpack到底有什么用 Webpack有哪些核心?分别都代表了什么? webpack到底怎么用 什么是WebPack,为什么要使用它 ps设计封面图制作成立体书籍效果扭曲在哪 PS如何用封面图片批量制作书籍效果图? 怎么用ps做小说封面 老师让我们用photoshop设计书籍封面,,我就只想问... 求教:用PS做书籍封面要打印的,做素材的图片分辨... 设计书本封面的步骤是什么 如何使用ps制作书的封面 怎么用ps做书的封面 微信显示该内容已不可见? 从朋友圈消息列表点进去别人之前发的朋友圈,显示该内容已不可见是什么意思?是删了还是锁了🔒 鸭肉火锅怎么做好吃又简单 鸭肉火锅 麻辣火锅鸭的做法 最正宗的做法 想知道正宗鸭肉火锅的做法 什么是web pack 为什么要用webpack 知乎 webpack 打包怎么优化的 如何写一个webpack插件 webpack问题。。。,。。。, 安装webpack后还是提示webpack不是内部命令 微信朋友圈内容不可见是删除了吗 excel如何计算绝对值 excel绝对值怎么算? Excel 如何在excel中设置绝对值公式 excel绝对值 EXCEL的绝对值符号怎么输入呢? excel表格中如何计算绝对值 excel绝对值怎么算 如何excel算绝对值 excel里绝对值函数 EXCEL中绝对值符号怎么打 EXCEL 怎么求绝对值 excel取绝对值函数 如何用excel将一组数取绝对值
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com