内容简介:基于 webpack 提供的接口,社区可以贡献各种 loader 和 plugin,组合使用可以使得 webpack 的功能很丰富强大。其中 JSON.stringify(process),解析为一个这时候的 process.env.NODE_ENV 是为 undefined,需要手动设置其值,看 webpack.DefinePlugin :arrow_heading_down:。
基于 webpack 提供的接口,社区可以贡献各种 loader 和 plugin,组合使用可以使得 webpack 的功能很丰富强大。
常用 loader
- sass-loader,css-loader,style-loader => 加载样式
- url-loader => 加载文件,如字体文件和图片文件
- html-loader => 加载模板文件
- babel-loader => 加载 js 和 jsx 文件
- awesome-typescript-loader => 加载 ts 文件
常用 Plugin
html-webpack-plugin
- 安装依赖
npm install html-webpack-plugin --save-dev
- 配置 modules
// webpack.config.js const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = { // ... modules:[ new HtmlWebpackPlugin({ template:'./index.html', // 引用的模板 filename:'index.html', // 打包后的命名 inject:true, // 是否自动引入打包的js文件 }) ] }
- 引用中的模板(index.html)可以使用一些变量及简单的分支
// index.html <% if(process.env.NODE_ENV==='development'){ %> 1313 <% } %> <script> console.log(<%= JSON.stringify(process) %>); console.log(<%= JSON.stringify(process.env) %>); </script>
其中 JSON.stringify(process),解析为一个 对象 ,JSON.stringify(process.env) 为 空对象
<script> console.log({"title":"browser","browser":true,"env":{},"argv":[],"version":"","versions":{}}); console.log({}); </script>
这时候的 process.env.NODE_ENV 是为 undefined,需要手动设置其值,看 webpack.DefinePlugin :arrow_heading_down:。
-
与 html-loader 冲突的问题,如果使用了 html-loader 加载 .html 后缀文件,将不会处理
<% %>
规则。HtmlWebpackPlugin 的 template 使用别的后缀,将原模板的后缀相应更改即可。
// webpack.config.js const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = { module:{ rules:[ { test:/\.html$/, loader:'html-loader' } ] }, plugins:[ new HtmlWebpackPlugin({ template:'index.htm', // 这里后缀改成和 .html 不一样的 filename:'index.html', inject:true, }) ] }
webpack.DefinePlugin
配置一些全局变量,开发和打包过程中,直接将代码中相应的变量变成配置的值。值需要进行 JSON.stringify 处理。
// webpack.config.js const wepback = require('webpack') module.exports = { plugins:[ new webpack.DefinePlugin({ 'process.env':{ 'NODE_ENV':JSON.stringify('development') }, 'BASE_URL':JSON.stringify('https://haokur.com') }) ] }
// index.htm <%if(process.env.NODE_ENV==='development'){%> 123 <%}%> <script> console.log(<%= process %>); console.log(<%= JSON.stringify(process) %>); console.log(<%= JSON.stringify(process.env) %>); console.log(<%= BASE_URL %>); </script>
// main.js console.log(BASE_URL);
打包后:
<!-- 打包后的代码,dist/index.html --> 123 <script> console.log([object Object]); console.log({"title":"browser","browser":true,"env":{},"argv":[],"version":"","versions":{}}); console.log({"NODE_ENV":"development"}); console.log(https://haokur.com); </script>
// 打包后的 main.js console.log('https://haokur.com')
- <%if %> 判断,判断为真,则显示里面内容,否则忽略;
- <%= process %> 直接解析出来,为 [object Object]
- BASE_URL 解析出来的没有加上两边的引号,但在 js 中解析成字符串会加上两边的冒号
- 非 HtmlWebpackPlugin.template 定义的模板页的除 js 之外的其他文件,不支持此解析功能
待续
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- webpack进阶
- 【webpack进阶】可视化展示webpack内部插件与钩子关系????
- Webpack Loader 高手进阶(一)
- Webpack Loader 高手进阶(二)
- 【webpack进阶】你真的掌握了loader么?- loader十问
- 【webpack进阶】前端运行时的模块化设计与实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度探索C++对象模型(影印版)
Stanley B. Lippman / 中国电力出版社 / 2003-8-1 / 42.00
本书重点介绍了C++面向对象程序设计的底层机制,包括结构式语意、暂时性对象的生成、封装、继承和虚拟——虚拟函数和虚拟继承。书中向你表明:理解底层实现模型,可以极大地提高你的编码效率。Lippman澄清了那些关于C++系统开销与复杂性的各种错误信息和猜测,指出了其中某些成本和利益交换确实存在。他在书中详述了各种实现模型,指出了它们的发展方向以及促使其发展的根本原因。本书涵盖了C++对象模型的语意暗示......一起来看看 《深度探索C++对象模型(影印版)》 这本书的介绍吧!