热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webpack1.X渐进教程(一)

1.安装webpacknpmInstallwebpack-g(-g代表全局安装,这样就不用每个使用webpack的项目都在当

1. 安装webpack

npm Install webpack -g
(-g 代表全局安装,这样就不用每个使用webpack的项目都在当前项目中再安装一遍了。)

2.初步使用

现在我们不用任何config文件(了解下过程,项目中肯定不会这么用),但是要有一个你想要编译的文件,比如一个js文件,一张图片,一个sass文件。
下面我们来release一个js文件(test.js,这个文件里只写一句:):

// test.jsalert('hellow world')

用法:webpack 入口文件 目标地址
使用:webpack ./test.js ./dist/bundle.js

然后你去look一下./dist/bundle.js这个文件的内容,不要care是否看的懂,just一句一句的看两边

3.使用配置文件

webpack ./test.js ./dist/bundle.js 这样的usage体验肯定是不好的,这时候就该配置文件登场了:webpack.config.js,这是webpack默认的配置文件名,当然你也可以修改,这个后面再讲。

:

// webpack.config.js
// 这里展示了最最基本的配置module.exports = {entry: './test.js',output: {path: './dist',// filename: '[name]-[chunkhash:8].bundle.js',// filename: '[name]-[hash].bundle.js', 下面有解释 chunkhash 和 hash 的区别filename: 'bundle.js',},module: {// loaders},plugins: [// plugins]}

chunkhash:当前“代码块”(chunk)的hash值,也可以理解为是代码块内容的md5值,如果代码没有修改,这个值是不会改变的;否则一律改变。
hash:webpack本次编译的hash值,任何一个文件的改变都会有新的hash生成。

contenthash:指根据当前文件的内容计算md5。 但是require进来的内容改变也会引起它的改变。
以上3个值都无法很好的满足现实开发中的需求,因为我们想要的是:我们打开某个编译好的文件,如果它本身的内容有所改变(不包括require进来的文件:css,image等),才去计算新的md5值。
这里推荐一片文章讲的很清楚:Webpack中hash与chunkhash的区别,以及js与css的hash指纹解耦方案,文中提到的webpack-md5-hash是个很好的选择。(补充:webpack-md5-hash有坑,勿入!坑:vendor引用了修改的chunk,但vendor的hahs并不会改变!)

其中的module:{}plugin:[]先忽略不管,下面很快就会讲到。
Now,我们有了配置文件,执行命令变得simple多了:
webpack
就这么一个单词,webpack会去配置文件里找入口文件 and 目标地址

4.ES6 or Sass or React or Vue

可能再项目里用到了es6,或者sass,less等现阶段浏览器不能识别的语言;或者你的文件是.jsxor.vue,这些文件里可能包含了HTML,CSS,SASS,ES6等等浏览器或者你的应用所运行的环境,但是这些环境不能识别这些文件or语法or语言,这个时候就需要先将它们编译成能够被识别并执行的语言or语法。

Now,让webpack中的主角loader登场。loader中文就是装载器,比如把es6装进es6-loader(这是一个假名字)中,过一会儿,es6-loader里面的es6就变成es5 or es3 了。
注意:loader相关的配置都写在上面提到的module:{}中。具体用法如下:

  • ES6
    加载器:babel-loader

用法:先安装npm install babel-loader --save-dev(如果报错,那么就根据提示缺什么 install 什么,比如babel-core等)
详细用法

module: {loaders: [{test: /\.js$/,exclude: /node_modules/,loader: 'babel-loader'}]
}

再加一个sass-loader

  • Sass
    加载器:babel-loader

用法:先安装npm install sass-loader --save-dev(如果报错,那么就根据提示缺什么 install 什么,比如:node-sass,它不是一个loader,但是sass-loader依赖它。)详细用法

// ...
module: {loaders: [{test: /\.js/,exclude: /node_modules/,loader: 'babel-loader'},{test: /\.scss/,exclude: /node_modules/,loader: 'sass-loader'}]
}
// ...

5.更多用法

Now,我们还剩一个plugins:[]
现在我们有一个需求,刚才我们编译好的bundle.js文件要引入到我们的某个.html文件中进行使用。但是如果我们像上面配置的那样加了hash值:[name]-[hash].bundle.js,文件名会由于文件内容的变化而变化,我们总不能 again and again 地修改html文件中的引用路径吧~So,找个插件来帮忙吧:html-webpack-plugin.

  • html-webpack-plugin
    插件:一样要先安装npm install html-webpack-plugin --save-dev

用法:

var HtmlWebpackPlugin = require('html-webpack-plugin');// ...
plugins: [new HtmlWebpackPlugin({// title:"我的webpack",// [name]-[hash].bundle.js要写入的html文件路径// 默认根路径是: output.path , 默认文件名是: index.html(eg:./dist/index.html)filename: './index.html',// template: './myIndex.html' 下面会讲到})
]
// ...

上面的配置会将output输出的文件bundle.js自动引入到./dist/index.html文件中



上面这个index.htmlHtmlWebpackPlugin的功劳自己生成的,所有的内容都需要在new HtmlWebpackPlugin({})中配置好(详细配置说明)。但是,多数情况下,我们会有自己index.html or myIndex.html,这些文件是我们已经添加了样式或者插入了其它代码。这时候template就派上用场了。我们自己的myIndex.html需要是这样的:



生成的文件是这样的:


webpack自带的和社区贡献的有很多优秀的插件,比如项目中会用到不支持AMD或者CommonJS的js库,webpack.ProvidePlugin(webpack自带的)妥妥的帮我解决这个问题:

// ...
plugins: [new HtmlWebpackPlugin({filename: './dist/index.html'}),//就可以屁颠屁颠的这么使用了:import $ from 'jquery'// 注意:你得先在某处引用jquery.js// 必入index.html中:new webpack.ProvidePlugin({$: "jquery",jQuery: "jquery","window.jQuery": "jquery"})]// ...



推荐阅读
  • Vue cli2.0 项目中使用Monaco Editor编辑器
    monaco-editor是微软出的一条开源web在线编辑器支持多种语言,代码高亮,代码提示等功能,与VisualStudioCode功能几乎相同。在项目中可能会用带代码编 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了在使用vue和webpack进行异步组件按需加载时可能出现的报错问题,并提供了解决方法。同时还解答了关于局部注册组件和v-if指令的相关问题。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 1.移除consol.log()的babel插件安装:npmibabel-plugin-transform-remove-console-D配置:babel.config.js:这 ... [详细]
  • npminstall-Dbabelcorebabelpreset-envbabelplugin-transform-runtimebabelpolyfillbabel-loader ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • npmrunbuild后dist文件夹下面直接浏览器打开index.html,css和js的路径都不正确。放到跟目录下就正常了,iis上同样只能在根目录下。我项目的目录如下: ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 使用npmi编译vue项目出现无法下载github.com中的对应的包源文件报错信息如下:npmERR!fatal:unabletoaccess'https:github ... [详细]
author-avatar
Edison小磊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有