webpack 项目实践
1,必要的环境
- node 环境 下载地址(http://nodejs.cn/)
- npm 貌似 下载地址(https://www.npmjs.com/)不过,貌似 Node 安装可自带 npm。
2, 建立项目工程
利用npm来初始化一个项目的工程文件,在命令窗口中找到项目文件
npm init
执行以上代码后,会在项目文件根目录生成一个 package.josn 文件(配置文件)
以后,安装的包的时候,使用 npm install ‘包名’ --save-dev
都可以把安装的包记录到 配置文件中,这样做的目的是,当你迁移项目的时候,只需要把你自己的代码打包走,然后带着 package.json 就可以直接迁移依赖包了。
3,建立 webpack 配置文件
这个需要我们手工建立,一般的配置文件名称默认写:webpack.config.js,
在此之前,需要我们利用 npm 来安装 webpack,一般我们安装到全局:
npm install webpack -g
然后,根据我们的实际情况来抒写我们的配置:
module.exports = {
// 基础路径
context : __dirname + '/src/script',
// 入口点,
entry : {
bindPhone : './bindPhone'
},
// 出口点
output : {
filename : '[name].bundle.js',
path : __dirname + '/built'
},
// 模块加载器,可解决不兼容 commonjs 的插件
module : {
loaders : [
{ test : require.resolve('jquery'), loader : 'expose?$!expose?jQuery'},
{ test : require.resolve('./src/script/lib/jquery.mockjax.min.js'), loader : 'exports?window.mockajax'}
]
}
}
具体每个配置项有什么用,可参看 API(http://webpack.github.io/docs/configuration.html)
4, 实际工作中遇到的问题
-
如何下手写?
我是直接在 html 中引用通过webpack 编译好的 js 文件,因为我知道webpack 会把在这个页面或则项目中用到的js都打包到此文件中。
<script src="../../buit/bindPhone.bundle.js"></script>
-
如何编写自己的业务模块代码?
因为 webpack 是兼容 AMD 规范和 commonjs 的,所以,我们可以利用 require()来加载依赖包,也可以用 define() 来定义我们的模块。当然,更好的是直接抒写:
var $ = require('jquery'); require('./lib/jquery.mockjax.min.js'); var Mock = (function(){ ... })() module.exports = Mock;
-
如何处理基于jquery的第三方插件?
实际工作中,因为暂时没有后台提供接口,因此,我就利用 mockjax 来模拟后台响应,这个插件依赖于 jquery 并且其本身不是AMD规范或则commonjs,所以遇到很多问题:
第一个问题 : jquery 未定义?
因为他依赖于jquery,但是我们并未在全局设定 jquery 对象,因此会报错,即使在 js 文件中require('jquery')
也不行var $ = require('jquery'); require('./lib/jquery.mockjax.min.js');
想这种类似的处理第三方的,我们一般解决办法是使用 shimming,要在 webpack 配置文件中把 jquery 变成全局变量
// 模块加载器,可解决不兼容 commonjs 的插件 module : { loaders : [ { test : require.resolve('jquery'), loader : 'expose?$!expose?jQuery'} ] }
处理此方法我们依赖于 expose-loader,所以,我们要安装包
npm install expose-loader --save-dev
-
在开发中,我们经常修修改改,难道每次都要 webpack 一下(编译)?
可以使用
--watch
来监听文件变化,并执行编译。webpack --watch 但是,我发现运行并不好事,所有我就用gulp来监听js文件变动,然后执行 webpack
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?