最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用webpack搭建pixi.js開發(fā)環(huán)境

 更新時間:2020年02月12日 09:42:28   作者:于小懶  
這篇文章主要介紹了使用webpack搭建pixi.js開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本文介紹怎么使用webpack搭建pixi.js游戲的開發(fā)環(huán)境,怎么配置babel將ES6+代碼最終轉(zhuǎn)換為ES5,怎么利用gulp將webpack和其他腳本粘合一起優(yōu)化項目并最終發(fā)布項目。

前提

  • 需要會簡單使用nodejs,了解package.json,會簡單使用npm init,npm install,npm run命令。
  • 需要稍微了解webpack和gulp。
  • 需要有g(shù)oogle chrome瀏覽器。
  • 最好會一點git,demo項目pixi-webpack-demo托管在github上,通過切換不同分支演示一步一步項目的構(gòu)建過程,現(xiàn)在把項目clone下來吧。

為了更容易理解,這里先貼出來項目最終的目錄結(jié)構(gòu)

.
├── 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

構(gòu)建環(huán)境

  • nodejs:需要node環(huán)境,前端項目現(xiàn)在基本都是基于node項目創(chuàng)建的,node的包管理系統(tǒng)和工具鏈很方便。
  • git:非必須,看demo時候切分支用。

初始化項目

運行g(shù)it checkout init切換到init分支即可看到這一步的示例。

  • 創(chuàng)建目錄pixi-webpack-demo,在pixi-webpack-demo根目錄下運行npm init命令初始化項目,按照提示輸入項目信息,完成后生成一個package.json文件。
  • 運行npm install --save pixi.js安裝依賴。
  • 完成上面兩步,package.json文件如下所示:
{
 "name": "pixi-webpack-demo",
 "version": "1.0.0",
 "description": "make pixi.js game with webpack and gulp",
 "main": "src/js/main.js",
 "keywords": ["pixi.js","webpack"],
 "author": "yulijun",
 "license": "MIT",
 "dependencies": {
  "pixi.js": "^5.2.1"
 }
}

創(chuàng)建文件src/index.html。

<html>
 <head>
  <title>pixi-webpack-demo</title>
 </head>
 <body>
 <canvas id="scene"></canvas>
  <!-- 注意這里的game.min.js文件,稍微在“引入webpack”步驟詳細(xì)解釋它-->
  <script type="text/javascript" src="game.min.js" charset="utf-8"></script>
 </body>
</html>

創(chuàng)建文件src/js/main.js,這個文件是游戲入口文件。

import * as PIXI from 'pixi.js'

const app = new PIXI.Application({
 width: 720,
 height: 1280,
 backgroundColor: 0x1099bb,
 view: document.querySelector('#scene')
});

const texture = PIXI.Texture.from('assets/bunny.png');
const bunny = new PIXI.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

運行g(shù)it checkout webpack切換到webpack分支即可看到這一步的示例。

  1. 運行npm install --save-dev webpack webpack-dev-server webpack-cli webpack-merge安裝依賴。
  2. 創(chuàng)建webpack.common.js文件,這個是webpack公共配置。
const path = require('path')
module.exports = {
 //游戲入口文件
 entry: ['./src/js/main.js'],
 output: {
  //js文件最終發(fā)布到哪個路徑
  path: path.resolve(__dirname, 'dist'),
  
  //注意這個名字和剛才html里面的名字必須一致。
  //開發(fā)階段webpack會自動處理這個文件讓html引用到,雖然磁盤上不會有這個文件。
  //但是最終發(fā)布項目的時候會生成這個文件。
  filename: 'game.min.js',
 },
 target: 'web'
}

創(chuàng)建webpack.dev.js文件,這個配置文件用于開發(fā)調(diào)試階段。

const path = require('path')
const merge = require('webpack-merge')
const common = require('./webpack.common.js')
module.exports = merge(common, {
 devtool: 'inline-source-map',
 mode: 'none',
 devServer: {
  //調(diào)試時候源代碼的位置
  contentBase: path.join(__dirname, 'src'),
  port: 8080,
  host: '0.0.0.0',
  hot: true
 }
})

創(chuàng)建webpack.prod.js文件,這個配置文件用于發(fā)布項目(稍后在引入babel和發(fā)布項目步驟再詳細(xì)介紹,這里暫時先貼出來),這里配置了babel轉(zhuǎn)碼、tree shake和生成source map等。

const merge = require('webpack-merge')
const common = 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配置節(jié)增加啟動命令。

{
 "name": "pixi-webpack-demo",
 "version": "1.0.0",
 "description": "make pixi.js game with webpack and gulp",
 "main": "src/js/main.js",
 "keywords": ["pixi.js","webpack"],
 "author": "yulijun",
 "license": "MIT",
 "scripts": {
  "start": "webpack-dev-server --open 'google chrome' --config webpack.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"
 }
}

現(xiàn)已成功引入了webpack,運行npm start啟動項目,會自動打開chrome瀏覽器,我們看到游戲已經(jīng)跑起來了!嘗試修改src/js/main.js文件,保存下,頁面會自動刷新,我們的修改也已經(jīng)能反映到頁面上了!

構(gòu)建項目

運行g(shù)it checkout master切換到master分支即可看到這最終一步的示例。

  • 引入babel讓你能使用最新的ES特性(這些庫主要是為了ES6+轉(zhuǎn)ES5,還有些pollyfill等等,這里不做過多的解釋,具體可參考babel官方文檔)。
    • npm install --save-dev @babel/core @babel/plugin-transform-runtime @babel/preset-env babel-loader
    • npm install --save core-js @babel/runtime
  • 引入gulp,運行npm install --save-dev gulp gulp-if gulp-imagemin rimraf安裝依賴。
  • 創(chuàng)建gulpfile.js
const {
 src,
 dest,
 parallel
} = require('gulp')
const path = require('path')
const gulpif = require('gulp-if')
const imagemin = require('gulp-imagemin')
const webpack = require('webpack')
const webpack_config = require('./webpack.prod')

function copyAssets() {
 return src(['src/**/*', '!src/js/**'])
  .pipe(gulpif(
   file => path.extname(file.relative) === '.png',
   imagemin([imagemin.optipng({
    optimizationLevel: 3
   })], {
    verbose: true
   })))
  .pipe(dest('dist'))
}

function jsBundle(next) {
 const compiler = 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節(jié)加入構(gòu)建相關(guān)命令,然后run npm build就能成功打包了!

{
 "name": "pixi-webpack-demo",
 "version": "1.0.0",
 "description": "make pixi.js game with webpack and gulp",
 "main": "src/js/main.js",
 "scripts": {
  "start": "webpack-dev-server --open 'google chrome' --config webpack.dev.js",
  "clean": "rimraf dist",
  "prebuild": "npm run clean",
  "build": "gulp dist"
 },
 "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"
 }
}

恭喜你,至此開發(fā)和構(gòu)建環(huán)境已經(jīng)全部完成,可嘗試在源碼中添加一些es6+語法,然后運行npm run build構(gòu)建項目,最終打包好的項目會在dist目錄中,js已經(jīng)被混淆并合并為game.min.js,無用的引用通過tree shake已經(jīng)被去掉了,包尺寸優(yōu)化到了最小,而且所有es6+的語法均轉(zhuǎn)換為es5以適應(yīng)更多的瀏覽器。所有的圖片也都進(jìn)行了壓縮處理。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談JavaScript中this的指向問題

    淺談JavaScript中this的指向問題

    這篇文章主要介紹了淺談JavaScript中this的指向問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Echarts在Taro微信小程序開發(fā)中的踩坑記錄

    Echarts在Taro微信小程序開發(fā)中的踩坑記錄

    這篇文章主要介紹了Echarts在Taro微信小程序開發(fā)中的踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 微信小程序支付功能完整流程記錄(前端)

    微信小程序支付功能完整流程記錄(前端)

    微信小程序的商戶系統(tǒng)一般是以接口的形式開發(fā)的,小程序通過調(diào)用與后端約定好的接口進(jìn)行參數(shù)的傳遞以及數(shù)據(jù)的接收,下面這篇文章主要給大家介紹了關(guān)于微信小程序支付功能(前端)的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 詳解webpack打包時排除其中一個css、js文件或單獨打包一個css、js文件(兩種方法)

    詳解webpack打包時排除其中一個css、js文件或單獨打包一個css、js文件(兩種方法)

    本文通過兩種方法給大家介紹了webpack打包時排除其中一個css、js文件,或單獨打包一個css、js文件的方法 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • JS維吉尼亞密碼算法實現(xiàn)代碼

    JS維吉尼亞密碼算法實現(xiàn)代碼

    我想用JS實現(xiàn)對文本的加密和解密,想用維吉尼亞密碼算法,誰有現(xiàn)成代碼啊
    2010-11-11
  • JS中比較冷門但非常好用的方法總結(jié)

    JS中比較冷門但非常好用的方法總結(jié)

    在Js中有一些比較冷門但是非常好用的方法,我在這里稱之為高級方法,這些方法沒有被廣泛使用或多或少是因為存在一些兼容性的問題,不是所有的瀏覽器都讀得懂的,這篇文章主要就是對這些方法做一個總結(jié),讓我們一起來看一下吧
    2023-06-06
  • JavaScript中運算符規(guī)則和隱式類型轉(zhuǎn)換示例詳解

    JavaScript中運算符規(guī)則和隱式類型轉(zhuǎn)換示例詳解

    JavaScript中運算符規(guī)則的隱式類型轉(zhuǎn)換是什么? 這是每個學(xué)習(xí)Javascript的新手們都應(yīng)該知道的一個問題,下面這篇文章主要給大家介紹了關(guān)于JavaScript中運算符規(guī)則和隱式類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • 直接在JS里創(chuàng)建JSON數(shù)據(jù)然后遍歷使用

    直接在JS里創(chuàng)建JSON數(shù)據(jù)然后遍歷使用

    本節(jié)為大家講解下直接在JS里創(chuàng)建JSON數(shù)據(jù),然后遍歷使用,需要的朋友可以參考下
    2014-07-07
  • 利用jsonp跨域調(diào)用百度js實現(xiàn)搜索框智能提示

    利用jsonp跨域調(diào)用百度js實現(xiàn)搜索框智能提示

    這篇文章主要為大家詳細(xì)介紹了使用jsonp跨域調(diào)用百度js實現(xiàn)搜索框智能提示,感興趣的小伙伴們可以參考一下
    2016-08-08
  • JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效

    JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效

    這篇文章主要給大家介紹了關(guān)于JS實現(xiàn)超級好看的鼠標(biāo)小尾巴特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

益阳市| 托里县| 湟源县| 安远县| 梁河县| 唐山市| 二连浩特市| 柳江县| 青川县| 桃源县| 南平市| 洮南市| 阿荣旗| 孝义市| 岗巴县| 汝南县| 额济纳旗| 延边| 攀枝花市| 遵义市| 齐齐哈尔市| 东乡县| 宣武区| 民丰县| 古蔺县| 广德县| 岑巩县| 进贤县| 芦山县| 兰西县| 习水县| 汽车| 博白县| 克什克腾旗| 榆林市| 福鼎市| 紫金县| 白河县| 永和县| 陆河县| 武鸣县|