使用webpack搭建pixi.js开发环境
本文介绍怎么使用webpack搭建pixi.js游戏的开发环境,怎么配置babel将ES6+代码最终转换为ES5,怎么利用gulp将webpack和其他脚本粘合一起优化项目并最终发布项目。
前提
- 需要会简单使用nodejs,了解package.json,会简单使用npminit,npminstall,npmrun命令。
- 需要稍微了解webpack和gulp。
- 需要有googlechrome浏览器。
- 最好会一点git,demo项目pixi-webpack-demo托管在github上,通过切换不同分支演示一步一步项目的构建过程,现在把项目clone下来吧。
为了更容易理解,这里先贴出来项目最终的目录结构
. ├──dist │├──index.html │├──game.min.js │└──assets │└──bunny.png ├──src │├──index.html │├──assets ││└──bunny.png │└──js │├──main.js │└──scene.js ├──gulpfile.js ├──package.json ├──webpack.common.js ├──webpack.dev.js └──webpack.prod.js
构建环境
- nodejs:需要node环境,前端项目现在基本都是基于node项目创建的,node的包管理系统和工具链很方便。
- git:非必须,看demo时候切分支用。
初始化项目
运行gitcheckoutinit切换到init分支即可看到这一步的示例。
- 创建目录pixi-webpack-demo,在pixi-webpack-demo根目录下运行npminit命令初始化项目,按照提示输入项目信息,完成后生成一个package.json文件。
- 运行npminstall--savepixi.js安装依赖。
- 完成上面两步,package.json文件如下所示:
{ "name":"pixi-webpack-demo", "version":"1.0.0", "description":"makepixi.jsgamewithwebpackandgulp", "main":"src/js/main.js", "keywords":["pixi.js","webpack"], "author":"yulijun", "license":"MIT", "dependencies":{ "pixi.js":"^5.2.1" } }
创建文件src/index.html。
pixi-webpack-demo
创建文件src/js/main.js,这个文件是游戏入口文件。
import*asPIXIfrom'pixi.js' constapp=newPIXI.Application({ width:720, height:1280, backgroundColor:0x1099bb, view:document.querySelector('#scene') }); consttexture=PIXI.Texture.from('assets/bunny.png'); constbunny=newPIXI.Sprite(texture); bunny.anchor.set(0.5); bunny.x=160 bunny.y=160 app.stage.addChild(bunny); app.ticker.add((delta)=>{ bunny.rotation-=0.01*delta; });
引入webpack
运行gitcheckoutwebpack切换到webpack分支即可看到这一步的示例。
- 运行npminstall--save-devwebpackwebpack-dev-serverwebpack-cliwebpack-merge安装依赖。
- 创建webpack.common.js文件,这个是webpack公共配置。
constpath=require('path') module.exports={ //游戏入口文件 entry:['./src/js/main.js'], output:{ //js文件最终发布到哪个路径 path:path.resolve(__dirname,'dist'), //注意这个名字和刚才html里面的名字必须一致。 //开发阶段webpack会自动处理这个文件让html引用到,虽然磁盘上不会有这个文件。 //但是最终发布项目的时候会生成这个文件。 filename:'game.min.js', }, target:'web' }
创建webpack.dev.js文件,这个配置文件用于开发调试阶段。
constpath=require('path') constmerge=require('webpack-merge') constcommon=require('./webpack.common.js') module.exports=merge(common,{ devtool:'inline-source-map', mode:'none', devServer:{ //调试时候源代码的位置 contentBase:path.join(__dirname,'src'), port:8080, host:'0.0.0.0', hot:true } })
创建webpack.prod.js文件,这个配置文件用于发布项目(稍后在引入babel和发布项目步骤再详细介绍,这里暂时先贴出来),这里配置了babel转码、treeshake和生成sourcemap等。
constmerge=require('webpack-merge') constcommon=require('./webpack.common.js') module.exports=merge(common,{ 'mode':'production', devtool:'source-map', module:{ rules:[{ test:/\.js$/, exclude:/node_modules/, use:{ loader:'babel-loader', options:{ presets:[ ['@babel/preset-env',{ 'corejs':'3', 'useBuiltIns':'usage' }] ], plugins:['@babel/plugin-transform-runtime'] } } }] } })
在package.json中的script配置节增加启动命令。
{ "name":"pixi-webpack-demo", "version":"1.0.0", "description":"makepixi.jsgamewithwebpackandgulp", "main":"src/js/main.js", "keywords":["pixi.js","webpack"], "author":"yulijun", "license":"MIT", "scripts":{ "start":"webpack-dev-server--open'googlechrome'--configwebpack.dev.js" }, "devDependencies":{ "webpack":"^4.41.5", "webpack-cli":"^3.3.10", "webpack-dev-server":"^3.10.3", "webpack-merge":"^4.2.2" }, "dependencies":{ "pixi.js":"^5.2.1" } }
现已成功引入了webpack,运行npmstart启动项目,会自动打开chrome浏览器,我们看到游戏已经跑起来了!尝试修改src/js/main.js文件,保存下,页面会自动刷新,我们的修改也已经能反映到页面上了!
构建项目
运行gitcheckoutmaster切换到master分支即可看到这最终一步的示例。
- 引入babel让你能使用最新的ES特性(这些库主要是为了ES6+转ES5,还有些pollyfill等等,这里不做过多的解释,具体可参考babel官方文档)。
- npminstall--save-dev@babel/core@babel/plugin-transform-runtime@babel/preset-envbabel-loader
- npminstall--savecore-js@babel/runtime
- 引入gulp,运行npminstall--save-devgulpgulp-ifgulp-imageminrimraf安装依赖。
- 创建gulpfile.js
const{ src, dest, parallel }=require('gulp') constpath=require('path') constgulpif=require('gulp-if') constimagemin=require('gulp-imagemin') constwebpack=require('webpack') constwebpack_config=require('./webpack.prod') functioncopyAssets(){ returnsrc(['src/**/*','!src/js/**']) .pipe(gulpif( file=>path.extname(file.relative)==='.png', imagemin([imagemin.optipng({ optimizationLevel:3 })],{ verbose:true }))) .pipe(dest('dist')) } functionjsBundle(next){ constcompiler=webpack(webpack_config) compiler.run((err,stats)=>{ if(err||stats.hasErrors()){ console.error(stats.toJson().errors) } next() }) } exports.dist=parallel(copyAssets,jsBundle)
在package.json中script节加入构建相关命令,然后runnpmbuild就能成功打包了!
{ "name":"pixi-webpack-demo", "version":"1.0.0", "description":"makepixi.jsgamewithwebpackandgulp", "main":"src/js/main.js", "scripts":{ "start":"webpack-dev-server--open'googlechrome'--configwebpack.dev.js", "clean":"rimrafdist", "prebuild":"npmrunclean", "build":"gulpdist" }, "author":"yulijun", "keywords":["pixi.js","webpack"], "license":"MIT", "devDependencies":{ "@babel/core":"^7.8.4", "@babel/plugin-transform-runtime":"^7.8.3", "@babel/preset-env":"^7.8.4", "babel-loader":"^8.0.6", "rimraf":"^3.0.2", "gulp":"^4.0.0", "gulp-if":"^2.0.2", "gulp-imagemin":"^4.1.0", "webpack":"^4.41.5", "webpack-cli":"^3.3.10", "webpack-dev-server":"^3.10.3", "webpack-merge":"^4.2.2" }, "dependencies":{ "@babel/runtime":"^7.8.4", "core-js":"^3.6.4", "pixi.js":"^5.2.1" } }
恭喜你,至此开发和构建环境已经全部完成,可尝试在源码中添加一些es6+语法,然后运行npmrunbuild构建项目,最终打包好的项目会在dist目录中,js已经被混淆并合并为game.min.js,无用的引用通过treeshake已经被去掉了,包尺寸优化到了最小,而且所有es6+的语法均转换为es5以适应更多的浏览器。所有的图片也都进行了压缩处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。