首頁 web前端 js教程 透過webpack如何打包koa2 框架app,該怎麼做?

透過webpack如何打包koa2 框架app,該怎麼做?

Jun 08, 2018 pm 01:56 PM
koa2 webpack 打包部署 部署

本文要跟大家介紹的是使用webpack為koa2框架打包的步驟及最終的部署,非常實用,有需要的小伙伴可以參考下

以前在用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函式。

其實是使用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。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

使用React如何進行元件庫的開發

利用fullpage.js實作捲動方式

使用npm安裝Electron失敗的問題

#

以上是透過webpack如何打包koa2 框架app,該怎麼做?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Jenkins Pipeline建置PHP程式的持續打包部署流程? 如何使用Jenkins Pipeline建置PHP程式的持續打包部署流程? Jul 30, 2023 pm 07:41 PM

如何使用JenkinsPipeline建置PHP程式的持續打包部署流程? Jenkins是一款非常受歡迎的持續整合和部署工具,它提供了豐富的插件和功能,使得建置和部署流程變得簡單且有效率。而JenkinsPipeline是Jenkins最新推出的插件,它允許我們使用完整的、可擴展的DSL(DomainSpecificLanguage)來定義持續整合和部

如何在Linux伺服器上部署可信賴的Web介面? 如何在Linux伺服器上部署可信賴的Web介面? Sep 09, 2023 pm 03:27 PM

如何在Linux伺服器上部署可信賴的Web介面?簡介:在現今資訊爆炸的時代,Web應用已成為了人們獲取資訊和進行交流的主要途徑之一。為了確保使用者的隱私安全和資訊的可靠性,我們需要在Linux伺服器上部署一個可信賴的Web介面。本文將介紹如何在Linux環境下進行Web介面的部署,並提供相關的程式碼範例。一、安裝和設定Linux伺服器首先,我們要準備一個Li

如何在FastAPI中使用Docker容器化部署應用程式 如何在FastAPI中使用Docker容器化部署應用程式 Jul 28, 2023 pm 01:25 PM

如何在FastAPI中使用Docker容器化部署應用程式引言:Docker是一種容器化技術,它可以將應用程式及其依賴項打包成一個獨立的、可移植的容器,從而實現快速部署和擴展。 FastAPI是一個基於Python的現代、高效能的Web框架,它提供了簡單且快速的API開發體驗。本文將介紹如何在FastAPI中使用Docker容器化部署應用程序,並提供對應的程式碼示

解決Tomcat部署war包後無法存取的問題的方法 解決Tomcat部署war包後無法存取的問題的方法 Jan 13, 2024 pm 12:07 PM

如何解決Tomcat部署war包後無法成功存取的困擾,需要具體程式碼範例Tomcat作為一個廣泛使用的JavaWeb伺服器,允許開發人員將自己開發的網路應用程式打包為war檔進行部署。然而,有時我們可能會遇到部署war包後無法成功存取的問題,這可能是由於配置不正確或其他原因引起的。在本文中,我們將提供一些解決這個困擾的具體程式碼範例。一、檢查Tomcat服務

如何用Docker實作PHP程式的打包部署? 如何用Docker實作PHP程式的打包部署? Jul 29, 2023 pm 05:48 PM

如何用Docker實作PHP程式的打包部署?隨著雲端運算和容器化技術的廣泛應用,越來越多的開發者開始使用Docker來實現應用程式的打包和部署。在本文中,我們會介紹如何使用Docker來實作PHP程式的打包部署,並給予相關的程式碼範例。一、安裝Docker在開始前,我們需要先安裝Docker。安裝步驟可以參考Docker官方文檔,根據不同的作業系統選擇對應的安裝方

Yolov10:詳解、部署、應用一站式齊全! Yolov10:詳解、部署、應用一站式齊全! Jun 07, 2024 pm 12:05 PM

一、前言在过去的几年里,YOLOs由于其在计算成本和检测性能之间的有效平衡,已成为实时目标检测领域的主导范式。研究人员探索了YOLO的架构设计、优化目标、数据扩充策略等,取得了显著进展。同时,依赖非极大值抑制(NMS)进行后处理阻碍了YOLO的端到端部署,并对推理延迟产生不利影响。在YOLOs中,各种组件的设计缺乏全面彻底的检查,导致显著的计算冗余,限制了模型的能力。它提供了次优的效率,以及相对大的性能改进潜力。在这项工作中,目标是从后处理和模型架构两个方面进一步提高YOLO的性能效率边界。为此

Flask應用的Gunicorn部署指南 Flask應用的Gunicorn部署指南 Jan 17, 2024 am 08:13 AM

如何使用Gunicorn部署Flask應用程式? Flask是一個輕量級的PythonWeb框架,被廣泛應用於開發各種類型的Web應用。而Gunicorn(GreenUnicorn)是一個基於Python的HTTP伺服器,用於運行WSGI(WebServerGatewayInterface)應用程式。本文將介紹如何使用Gunicorn部署Flask應用,並附

Web專案部署在Tomcat上的最佳實務和常見問題解決方案 Web專案部署在Tomcat上的最佳實務和常見問題解決方案 Dec 29, 2023 am 08:21 AM

Tomcat部署Web專案的最佳實踐和常見問題解決方法引言:Tomcat作為一個輕量級的Java應用伺服器,在Web應用開發中得到了廣泛應用。本文將介紹Tomcat部署Web專案的最佳實務和常見問題解決方法,並提供具體的程式碼範例,幫助讀者更好地理解和應用。一、專案目錄結構規劃在部署Web專案之前,我們需要規劃專案的目錄結構。一般來說,我們可以按照以下方式組織

See all articles