亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

使用webpack打包koa2 框架app

2024-05-06 16:42:13
字體:
來源:轉載
供稿:網友

以前在用koa寫server的時候,發布簡直是噩夢。需要將src里面的全部文件都覆蓋掉,config配置文件也要覆蓋,稍有不慎就會線上報各種各樣的問題,然后就得回退,本地調好在發布。偶然看見一篇文章講 如何使用webpack打包koa app ,驚為天人,原來webpack也能打包后臺。這在以前想都沒想過。

關鍵問題

一:所有node_modules里的模塊都不進行打包

webpack的核心功能是將引用的各個模塊打到一個文件里,并會將各種規范的模塊進行統一的模塊化處理(webpack規范)。

然而node中包含大量的fs、path操作,這些fs和path操作在打包完成后將沒有操作對象,還會報出很多各樣的錯誤。

所以使用webpack打包的核心就是拒絕打包一切node_modules里的模塊,只是將相對路徑引用的文件打包到一個文件里。恰巧我們發現webapck提供externals屬性來排除掉不需要打包的模塊。

再深入點我們可以發現:像webpack、nodemon、babel-preset-env這樣的模塊是app開發環境依賴的包,我們的程序里根本不會require這些模塊。

綜上可以發現:我們只將所有require到的包排除掉就可以了,這個模塊對應的也就是package.json里dependencies下的模塊。有關dependencies和devDependencies的區別要理解好。

因此我們可以使用externals-dependencies這個插件配合externals屬性實現dependencies的排除工作。

代碼:

const webpack = require('webpack');const _externals = require('externals-dependencies')module.exports = {  ...  externals: _externals(),  ...}

二:target指向node

官方文檔:編譯為類 Node.js 環境可用(使用 Node.js require 加載 chunk)

代碼:

target: 'node',

三:增加node配置

官方文檔:這些選項可以配置是否 polyfill 或 mock 某些 Node.js全局變量和模塊。這可以使最初為 Node.js 環境編寫的代碼,在其他環境(如瀏覽器)中運行。

代碼:

node: {
    console: true,
    global: true,
    process: true,
    Buffer: true,
    __filename: true,
    __dirname: true,
    setImmediate: true,
    path: true
},

四:babel配置

為了兼容低版本的node不原生支持async/await的問題。這里babel我使用了babel-preset-env{"modules": false}的配置。此配置會將es6語法轉為es5語法,例如let、const轉為var。

同時將所有的async/await函數也轉成了polyfill里定義的_asyncToGenerator函數。

function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }

其實是使用promise實現了async函數的功能。

當然這個函數在運行時還需要regeneratorRuntime函數。所以我在全局引入了babel-polyfill來提供regeneratorRuntime函。

注:如果你的node版本很高且原生支持async/await,大可將babel-preset-env和babel-polyfill省略掉

代碼:

const path = require('path');const webpack = require('webpack');const _externals = require('externals-dependencies')module.exports = {  entry: {    app: [      // 如果polyfill放在這里,打包的時候將不會被external,必須在js里require才能有效external      // 'babel-polyfill',      './src/index.js'    ]  },  output: {    path: path.resolve(__dirname),    filename: '[name].js'  },  resolve: {    extensions: [".js"]  },  target: 'node',  externals: _externals(),  context: __dirname,  node: {    console: true,    global: true,    process: true,    Buffer: true,    __filename: true,    __dirname: true,    setImmediate: true,    path: true  },  module: {    rules: [      {        test: //.js/,        use: ['babel-loader']      }    ]  },  plugins: [    new webpack.DefinePlugin({      'process.env': {        NODE_ENV: '"development"'      }    }),  ]}

部署

經過打包,部署的時候就方便多了,只需要將package.json、app.js、以及view里的html部署上線就好了。然后在服務器上執行

1. npm install
2. npm run for

然后server就后臺運行了。如果需要更新發布,只需要本地重新npm run dev或npm run build打好包,拖到服務器覆蓋app.js即可。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品视频| 欧美电影在线观看网站| 国产精品免费久久久| 国产精品免费看久久久香蕉| 国产精品视频一| 亚洲欧美综合v| 懂色av中文一区二区三区天美| 欧美国产视频一区二区| 精品久久久久久亚洲国产300| 亚洲一区av在线播放| 亚洲va国产va天堂va久久| 91成人天堂久久成人| 久久精品中文字幕免费mv| 国产免费一区二区三区在线能观看| 国产欧美一区二区三区久久| 国内外成人免费激情在线视频| 麻豆一区二区在线观看| 亚洲精品免费在线视频| 亚洲va久久久噜噜噜久久天堂| 亚洲精品免费一区二区三区| 亚洲男人天堂古典| 亚洲自拍高清视频网站| 欧美午夜激情小视频| 国产精自产拍久久久久久蜜| 日韩精品福利网站| 欧美性生活大片免费观看网址| 中文字幕久精品免费视频| 久久久亚洲精品视频| 日韩欧美一区二区三区久久| 欧美乱妇高清无乱码| 国产日韩在线免费| 欧美成人免费视频| 欧美在线一区二区视频| 日本精品在线视频| 亚洲最大成人免费视频| 欧美成人中文字幕| 欧美激情a在线| 乱亲女秽乱长久久久| 久久视频在线播放| 中文字幕免费精品一区| 欧美在线播放视频| 日韩av色在线| 九九热精品在线| 日韩成人在线电影网| 久久人人爽亚洲精品天堂| 91精品国产色综合久久不卡98| 中文字幕精品影院| 亚洲精品国产精品国自产在线| 国产精品久久久久久久久借妻| 日韩视频免费在线| 日韩av电影免费观看高清| 亚洲精品日韩丝袜精品| 国产精品成人国产乱一区| 成人免费视频a| 亚洲人成电影网站色…| 欧美国产在线视频| 国产日本欧美视频| 精品久久久久人成| 国产视频久久网| 国产欧美精品日韩| 国产精品99久久99久久久二8| 欧美性感美女h网站在线观看免费| 精品免费在线观看| 伊人久久综合97精品| 性金发美女69hd大尺寸| 国产精品网站大全| 国产精品视频一区国模私拍| 中文字幕欧美日韩va免费视频| 国产亚洲精品一区二555| 高清日韩电视剧大全免费播放在线观看| 久久精品99久久香蕉国产色戒| 欧美日韩视频免费播放| 91chinesevideo永久地址| 国外成人免费在线播放| 另类少妇人与禽zozz0性伦| 亚洲图片欧洲图片av| 国产精品白丝jk喷水视频一区| 欧洲s码亚洲m码精品一区| 久久久久久久久久久国产| 在线观看国产欧美| 97超碰国产精品女人人人爽| 亚洲无亚洲人成网站77777| 国产中文欧美精品| 69av成年福利视频| 日韩精品免费在线观看| 久久久精品在线| 日本欧美爱爱爱| 久久久久久久久国产| 91探花福利精品国产自产在线| 国产成人在线一区| 亚洲欧美中文在线视频| 欧美中文字幕视频在线观看| 久久av在线播放| 欧美性色19p| 91精品国产99久久久久久| 欧美一级在线播放| 亚洲r级在线观看| 亚洲无线码在线一区观看| 色婷婷久久一区二区| 国内伊人久久久久久网站视频| 91国语精品自产拍在线观看性色| 国产精品视频久久| 亚洲国产日韩欧美综合久久| 69国产精品成人在线播放| 在线观看日韩专区| 久久亚洲精品毛片| 91av视频在线观看| 亚洲精品按摩视频| 色阁综合伊人av| 色诱女教师一区二区三区| 91免费精品视频| 亚洲国产天堂久久综合网| 欧美精品videossex性护士| 亚洲视频在线免费看| 国产精品h在线观看| 国内精品一区二区三区四区| 中文字幕欧美精品日韩中文字幕| 国产亚洲欧洲在线| 日韩成人中文电影| 亚洲精品久久久久久久久| 中文字幕亚洲综合久久| 国产精品三级久久久久久电影| 欧美激情亚洲视频| 精品国产乱码久久久久久婷婷| 欧美大胆在线视频| 欧美在线视频一区二区| 国产日韩欧美电影在线观看| 97在线视频国产| 欧美性猛交xxxx免费看久久久| 久久国产精品久久久| 国产欧美一区二区三区久久人妖| 中文字幕国产日韩| 最近2019好看的中文字幕免费| 中文字幕精品在线视频| 国产91色在线| www.亚洲人.com| 萌白酱国产一区二区| 欧美日韩在线免费观看| 欧美成人午夜激情视频| 亚洲精品一区二区三区婷婷月| 91精品视频网站| 久久久久久国产精品美女| 国产狼人综合免费视频| 欧美亚洲日本网站| 欧美怡红院视频一区二区三区| 伊人男人综合视频网| 中文字幕精品久久| www亚洲欧美| 欧美伊久线香蕉线新在线| 日韩精品久久久久久久玫瑰园| 日韩精品视频免费| 精品欧美激情精品一区| 久久亚洲国产成人| 姬川优奈aav一区二区| 日韩欧美国产一区二区| 亚洲欧洲自拍偷拍| 国产精品女视频| 国产精品美女免费视频| 136fldh精品导航福利| 3344国产精品免费看| 国产在线拍偷自揄拍精品| 国产区精品视频| 欧美与欧洲交xxxx免费观看| 欧美性受xxxx黑人猛交|