搜尋
首頁web前端js教程透過webpack如何打包koa2 框架app,該怎麼做?
透過webpack如何打包koa2 框架app,該怎麼做?Jun 08, 2018 pm 01:56 PM
koa2webpack打包部署部署

本文要跟大家介紹的是使用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
VUE3入门教程:使用Webpack进行打包和构建VUE3入门教程:使用Webpack进行打包和构建Jun 15, 2023 pm 06:17 PM

Vue是一款优秀的JavaScript框架,它可以帮助我们快速构建交互性强、高效性好的Web应用程序。Vue3是Vue的最新版本,它引入了很多新的特性和功能。Webpack是目前最流行的JavaScript模块打包器和构建工具之一,它可以帮助我们管理项目中的各种资源。本文就为大家介绍如何使用Webpack打包和构建Vue3应用程序。1.安装Webpack

vite和webpack的区别是什么vite和webpack的区别是什么Jan 11, 2023 pm 02:55 PM

区别:1、webpack服务器启动速度比vite慢;由于vite启动的时候不需要打包,也就无需分析模块依赖、编译,所以启动速度非常快。2、vite热更新比webpack快;vite在HRM方面,当某个模块内容改变时,让浏览器去重新请求该模块即可。3、vite用esbuild预构建依赖,而webpack基于node。4、vite的生态不及webpack,加载器、插件不够丰富。

Laravel开发:如何使用Laravel Envoyer部署应用程序?Laravel开发:如何使用Laravel Envoyer部署应用程序?Jun 14, 2023 am 10:15 AM

Laravel是一个极受欢迎的PHP开发框架,它以其简洁、优雅和高效的特性得到了众多开发者的青睐。随着Laravel的不断发展,LaravelEnvoyer作为一种部署工具,可帮助开发者更容易地将应用程序部署在服务器上。本文将向您介绍如何使用LaravelEnvoyer快速、轻松地部署应用程序。LaravelEnvoyer是什么?LaravelEnv

如何使用PHP和webpack进行模块化开发如何使用PHP和webpack进行模块化开发May 11, 2023 pm 03:52 PM

随着Web开发技术的不断发展,前后端分离、模块化开发已经成为了一个广泛的趋势。PHP作为一种常用的后端语言,在进行模块化开发时,我们需要借助一些工具来实现模块的管理和打包,其中webpack是一个非常好用的模块化打包工具。本文将介绍如何使用PHP和webpack进行模块化开发。一、什么是模块化开发模块化开发是指将程序分解成不同的独立模块,每个模块都有自己的作

webpack怎么将es6转成es5的模块webpack怎么将es6转成es5的模块Oct 18, 2022 pm 03:48 PM

配置方法:1、用导入的方法把ES6代码放到打包的js代码文件中;2、利用npm工具安装babel-loader工具,语法“npm install -D babel-loader @babel/core @babel/preset-env”;3、创建babel工具的配置文件“.babelrc”并设定转码规则;4、在webpack.config.js文件中配置打包规则即可。

Webpack是什么?详解它是如何工作的?Webpack是什么?详解它是如何工作的?Oct 13, 2022 pm 07:36 PM

Webpack是一款模块打包工具。它为不同的依赖创建模块,将其整体打包成可管理的输出文件。这一点对于单页面应用(如今Web应用的事实标准)来说特别有用。

使用Spring Boot和Webpack构建前端工程和插件系统使用Spring Boot和Webpack构建前端工程和插件系统Jun 22, 2023 am 09:13 AM

随着现代Web应用程序的复杂性不断增加,构建优秀的前端工程和插件系统变得越来越重要。随着SpringBoot和Webpack的流行,它们成为了一个构建前端工程和插件系统的完美组合。SpringBoot是一个Java框架,它以最小的配置要求来创建Java应用程序。它提供了很多有用的功能,比如自动配置,使开发人员可以更快、更容易地搭建和部署Web应用程序。W

vue webpack可打包哪些文件vue webpack可打包哪些文件Dec 20, 2022 pm 07:44 PM

在vue中,webpack可以将js、css、图片、json等文件打包为合适的格式,以供浏览器使用;在webpack中js、css、图片、json等文件类型都可以被当做模块来使用。webpack中各种模块资源可打包合并成一个或多个包,并且在打包的过程中,可以对资源进行处理,如压缩图片、将scss转成css、将ES6语法转成ES5等可以被html识别的文件类型。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

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

SublimeText3 Mac版

SublimeText3 Mac版

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