mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-10 04:05:42 +01:00
Introduce esbuild on webpack (#14578)
* Vendor node mods as cache; fix esbuild/fomantic offline build * Fix --exclude; use bsdtar for consistent globbing * Fall back to GNU tar; forward-compatible for APT 2.0 * Avoid having extd. attrs with bsdtar * Dependency and misc. optimizations * Remove extra code after esbuild-loader update Co-authored-by: Mike L <cl.jeremy@qq.com>
This commit is contained in:
parent
bc1f2117f1
commit
42efa14f51
8 changed files with 157 additions and 930 deletions
|
@ -495,7 +495,7 @@ steps:
|
||||||
pull: always
|
pull: always
|
||||||
image: techknowlogick/xgo:go-1.16.x
|
image: techknowlogick/xgo:go-1.16.x
|
||||||
commands:
|
commands:
|
||||||
- curl -sL https://deb.nodesource.com/setup_14.x | bash - && apt -y install nodejs
|
- curl -sL https://deb.nodesource.com/setup_14.x | bash - && apt -y install nodejs bsdtar\|libarchive-tools
|
||||||
- export PATH=$PATH:$GOPATH/bin
|
- export PATH=$PATH:$GOPATH/bin
|
||||||
- make release
|
- make release
|
||||||
environment:
|
environment:
|
||||||
|
@ -591,7 +591,7 @@ steps:
|
||||||
pull: always
|
pull: always
|
||||||
image: techknowlogick/xgo:go-1.16.x
|
image: techknowlogick/xgo:go-1.16.x
|
||||||
commands:
|
commands:
|
||||||
- curl -sL https://deb.nodesource.com/setup_14.x | bash - && apt -y install nodejs
|
- curl -sL https://deb.nodesource.com/setup_14.x | bash - && apt-get install -y nodejs bsdtar\|libarchive-tools
|
||||||
- export PATH=$PATH:$GOPATH/bin
|
- export PATH=$PATH:$GOPATH/bin
|
||||||
- make release
|
- make release
|
||||||
environment:
|
environment:
|
||||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -80,6 +80,8 @@ coverage.all
|
||||||
/public/css
|
/public/css
|
||||||
/public/fonts
|
/public/fonts
|
||||||
/public/img/webpack
|
/public/img/webpack
|
||||||
|
/web_src/fomantic/node_modules
|
||||||
|
/web_src/fomantic/semantic.json
|
||||||
/web_src/fomantic/build/*
|
/web_src/fomantic/build/*
|
||||||
!/web_src/fomantic/build/semantic.js
|
!/web_src/fomantic/build/semantic.js
|
||||||
!/web_src/fomantic/build/semantic.css
|
!/web_src/fomantic/build/semantic.css
|
||||||
|
@ -93,6 +95,7 @@ coverage.all
|
||||||
!/web_src/fomantic/build/themes/default/assets/fonts/outline-icons.woff2
|
!/web_src/fomantic/build/themes/default/assets/fonts/outline-icons.woff2
|
||||||
/VERSION
|
/VERSION
|
||||||
/.air
|
/.air
|
||||||
|
/.npm-cache
|
||||||
|
|
||||||
# Snapcraft
|
# Snapcraft
|
||||||
snap/.snapcraft/
|
snap/.snapcraft/
|
||||||
|
|
55
Makefile
55
Makefile
|
@ -14,6 +14,8 @@ else
|
||||||
|
|
||||||
# This is the "normal" part of the Makefile
|
# This is the "normal" part of the Makefile
|
||||||
|
|
||||||
|
TAR := $(shell hash bsdtar > /dev/null 2>&1 && echo "bsdtar --no-xattrs" || echo "tar" )
|
||||||
|
|
||||||
DIST := dist
|
DIST := dist
|
||||||
DIST_DIRS := $(DIST)/binaries $(DIST)/release
|
DIST_DIRS := $(DIST)/binaries $(DIST)/release
|
||||||
IMPORT := code.gitea.io/gitea
|
IMPORT := code.gitea.io/gitea
|
||||||
|
@ -93,7 +95,7 @@ GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/
|
||||||
|
|
||||||
FOMANTIC_CONFIGS := semantic.json web_src/fomantic/theme.config.less web_src/fomantic/_site/globals/site.variables
|
FOMANTIC_CONFIGS := semantic.json web_src/fomantic/theme.config.less web_src/fomantic/_site/globals/site.variables
|
||||||
FOMANTIC_DEST := web_src/fomantic/build/semantic.js web_src/fomantic/build/semantic.css
|
FOMANTIC_DEST := web_src/fomantic/build/semantic.js web_src/fomantic/build/semantic.css
|
||||||
FOMANTIC_DEST_DIR := web_src/fomantic/build
|
FOMANTIC_WORK_DIR := web_src/fomantic
|
||||||
|
|
||||||
WEBPACK_SOURCES := $(shell find web_src/js web_src/less -type f)
|
WEBPACK_SOURCES := $(shell find web_src/js web_src/less -type f)
|
||||||
WEBPACK_CONFIGS := webpack.config.js
|
WEBPACK_CONFIGS := webpack.config.js
|
||||||
|
@ -642,14 +644,16 @@ release-compress: | $(DIST_DIRS)
|
||||||
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done;
|
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done;
|
||||||
|
|
||||||
.PHONY: release-sources
|
.PHONY: release-sources
|
||||||
release-sources: | $(DIST_DIRS) node_modules
|
release-sources: | $(DIST_DIRS) npm-cache
|
||||||
echo $(VERSION) > $(STORED_VERSION_FILE)
|
echo $(VERSION) > $(STORED_VERSION_FILE)
|
||||||
tar --exclude=./$(DIST) --exclude=./.git --exclude=./$(MAKE_EVIDENCE_DIR) --exclude=./node_modules/.cache --exclude=./$(AIR_TMP_DIR) -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz .
|
$(eval EXCL := --exclude=$(shell [ ! "$(TAR)" = "tar" ] && echo "^" )./)
|
||||||
|
$(eval EXCL_RECURSIVE := --exclude=)
|
||||||
|
$(TAR) $(EXCL)$(DIST) $(EXCL).git $(EXCL)$(MAKE_EVIDENCE_DIR) $(EXCL_RECURSIVE)node_modules $(EXCL)$(AIR_TMP_DIR) -czf $(DIST)/release/gitea-src-$(VERSION).tar.gz .
|
||||||
rm -f $(STORED_VERSION_FILE)
|
rm -f $(STORED_VERSION_FILE)
|
||||||
|
|
||||||
.PHONY: release-docs
|
.PHONY: release-docs
|
||||||
release-docs: | $(DIST_DIRS) docs
|
release-docs: | $(DIST_DIRS) docs
|
||||||
tar -czf $(DIST)/release/gitea-docs-$(VERSION).tar.gz -C ./docs/public .
|
$(TAR) -czf $(DIST)/release/gitea-docs-$(VERSION).tar.gz -C ./docs/public .
|
||||||
|
|
||||||
.PHONY: docs
|
.PHONY: docs
|
||||||
docs:
|
docs:
|
||||||
|
@ -662,6 +666,25 @@ node_modules: package-lock.json
|
||||||
npm install --no-save
|
npm install --no-save
|
||||||
@touch node_modules
|
@touch node_modules
|
||||||
|
|
||||||
|
.PHONY: npm-cache
|
||||||
|
npm-cache: .npm-cache $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui
|
||||||
|
|
||||||
|
.npm-cache: package-lock.json
|
||||||
|
rm -rf .npm-cache
|
||||||
|
$(eval ESBUILD_VERSION := `node -p "require('./package-lock.json').dependencies.esbuild.version"`)
|
||||||
|
npm config --userconfig=.npmrc set cache=.npm-cache
|
||||||
|
rm -rf node_modules && npm install --no-save
|
||||||
|
npm config --userconfig=$(FOMANTIC_WORK_DIR)/.npmrc set cache=../../.npm-cache
|
||||||
|
echo esbuild-{darwin-64,linux-{arm,arm64,32,64},windows-{32,64}}@$(ESBUILD_VERSION) | tr " " "\n" | xargs -n 1 -P 4 npm cache add
|
||||||
|
rm -rf $(FOMANTIC_WORK_DIR)/node_modules
|
||||||
|
@touch .npm-cache
|
||||||
|
|
||||||
|
.PHONY: npm-uncache
|
||||||
|
npm-uncache:
|
||||||
|
rm -rf .npm-cache
|
||||||
|
npm config --userconfig=$(FOMANTIC_WORK_DIR)/.npmrc rm cache
|
||||||
|
npm config --userconfig=.npmrc rm cache
|
||||||
|
|
||||||
.PHONY: npm-update
|
.PHONY: npm-update
|
||||||
npm-update: node-check | node_modules
|
npm-update: node-check | node_modules
|
||||||
npx updates -cu
|
npx updates -cu
|
||||||
|
@ -672,14 +695,22 @@ npm-update: node-check | node_modules
|
||||||
.PHONY: fomantic
|
.PHONY: fomantic
|
||||||
fomantic: $(FOMANTIC_DEST)
|
fomantic: $(FOMANTIC_DEST)
|
||||||
|
|
||||||
$(FOMANTIC_DEST): $(FOMANTIC_CONFIGS) | node_modules
|
$(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui:
|
||||||
@if [ ! -d node_modules/fomantic-ui ]; then \
|
ln -sf ../../semantic.json $(FOMANTIC_WORK_DIR)
|
||||||
npm install --no-save --no-package-lock fomantic-ui@2.8.7; \
|
cd $(FOMANTIC_WORK_DIR); \
|
||||||
fi
|
rm -rf node_modules && mkdir node_modules && \
|
||||||
rm -rf $(FOMANTIC_DEST_DIR)
|
npm install fomantic-ui; \
|
||||||
cp -f web_src/fomantic/theme.config.less node_modules/fomantic-ui/src/theme.config
|
rm -f semantic.json
|
||||||
cp -rf web_src/fomantic/_site/* node_modules/fomantic-ui/src/_site/
|
@touch $(FOMANTIC_WORK_DIR)/node_modules
|
||||||
npx gulp -f node_modules/fomantic-ui/gulpfile.js build
|
|
||||||
|
$(FOMANTIC_DEST): $(FOMANTIC_CONFIGS) $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui
|
||||||
|
ln -sf ../../semantic.json $(FOMANTIC_WORK_DIR)
|
||||||
|
rm -rf $(FOMANTIC_WORK_DIR)/build
|
||||||
|
cd $(FOMANTIC_WORK_DIR); \
|
||||||
|
cp -f theme.config.less node_modules/fomantic-ui/src/theme.config; \
|
||||||
|
cp -rf _site node_modules/fomantic-ui/src/; \
|
||||||
|
npx gulp -f node_modules/fomantic-ui/gulpfile.js build; \
|
||||||
|
rm -f semantic.json
|
||||||
@touch $(FOMANTIC_DEST)
|
@touch $(FOMANTIC_DEST)
|
||||||
|
|
||||||
.PHONY: webpack
|
.PHONY: webpack
|
||||||
|
|
963
package-lock.json
generated
963
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -5,14 +5,9 @@
|
||||||
"node": ">= 10.13.0"
|
"node": ">= 10.13.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "7.13.10",
|
|
||||||
"@babel/plugin-transform-runtime": "7.13.10",
|
|
||||||
"@babel/preset-env": "7.13.10",
|
|
||||||
"@babel/runtime": "7.13.10",
|
|
||||||
"@claviska/jquery-minicolors": "2.3.5",
|
"@claviska/jquery-minicolors": "2.3.5",
|
||||||
"@primer/octicons": "12.1.0",
|
"@primer/octicons": "12.1.0",
|
||||||
"add-asset-webpack-plugin": "2.0.1",
|
"add-asset-webpack-plugin": "2.0.1",
|
||||||
"babel-loader": "8.2.2",
|
|
||||||
"clipboard": "2.0.8",
|
"clipboard": "2.0.8",
|
||||||
"codemirror": "5.60.0",
|
"codemirror": "5.60.0",
|
||||||
"core-js": "3.9.1",
|
"core-js": "3.9.1",
|
||||||
|
@ -20,6 +15,7 @@
|
||||||
"css-minimizer-webpack-plugin": "1.3.0",
|
"css-minimizer-webpack-plugin": "1.3.0",
|
||||||
"dropzone": "5.8.1",
|
"dropzone": "5.8.1",
|
||||||
"easymde": "2.14.0",
|
"easymde": "2.14.0",
|
||||||
|
"esbuild-loader": "2.11.0",
|
||||||
"escape-goat": "3.0.0",
|
"escape-goat": "3.0.0",
|
||||||
"fast-glob": "3.2.5",
|
"fast-glob": "3.2.5",
|
||||||
"font-awesome": "4.7.0",
|
"font-awesome": "4.7.0",
|
||||||
|
|
|
@ -9,12 +9,12 @@
|
||||||
"themes": "src/themes/"
|
"themes": "src/themes/"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"packaged": "../../web_src/fomantic/build/",
|
"packaged": "../../build/",
|
||||||
"uncompressed": "../../web_src/fomantic/build/components/",
|
"uncompressed": "../../build/components/",
|
||||||
"compressed": "../../web_src/fomantic/build/components/",
|
"compressed": "../../build/components/",
|
||||||
"themes": "../../web_src/fomantic/build/themes/"
|
"themes": "../../build/themes/"
|
||||||
},
|
},
|
||||||
"clean": "../../web_src/fomantic/build/"
|
"clean": "../../build/"
|
||||||
},
|
},
|
||||||
"permission": false,
|
"permission": false,
|
||||||
"autoInstall": false,
|
"autoInstall": false,
|
||||||
|
|
2
web_src/fomantic/.npmrc
Normal file
2
web_src/fomantic/.npmrc
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
optional=false
|
||||||
|
package-lock=false
|
|
@ -5,9 +5,8 @@ const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
|
||||||
const LicenseCheckerWebpackPlugin = require('license-checker-webpack-plugin');
|
const LicenseCheckerWebpackPlugin = require('license-checker-webpack-plugin');
|
||||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||||
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
|
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
|
||||||
const TerserPlugin = require('terser-webpack-plugin');
|
|
||||||
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
||||||
const {statSync} = require('fs');
|
const {ESBuildMinifyPlugin} = require('esbuild-loader');
|
||||||
const {resolve, parse} = require('path');
|
const {resolve, parse} = require('path');
|
||||||
const {SourceMapDevToolPlugin} = require('webpack');
|
const {SourceMapDevToolPlugin} = require('webpack');
|
||||||
|
|
||||||
|
@ -78,13 +77,9 @@ module.exports = {
|
||||||
optimization: {
|
optimization: {
|
||||||
minimize: isProduction,
|
minimize: isProduction,
|
||||||
minimizer: [
|
minimizer: [
|
||||||
new TerserPlugin({
|
new ESBuildMinifyPlugin({
|
||||||
extractComments: false,
|
target: 'es2015',
|
||||||
terserOptions: {
|
minify: true
|
||||||
output: {
|
|
||||||
comments: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
}),
|
||||||
new CssMinimizerPlugin({
|
new CssMinimizerPlugin({
|
||||||
sourceMap: true,
|
sourceMap: true,
|
||||||
|
@ -131,36 +126,9 @@ module.exports = {
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
use: [
|
use: [
|
||||||
{
|
{
|
||||||
loader: 'babel-loader',
|
loader: 'esbuild-loader',
|
||||||
options: {
|
options: {
|
||||||
sourceMaps: true,
|
target: 'es2015'
|
||||||
cacheDirectory: true,
|
|
||||||
cacheCompression: false,
|
|
||||||
cacheIdentifier: [
|
|
||||||
resolve(__dirname, 'package.json'),
|
|
||||||
resolve(__dirname, 'package-lock.json'),
|
|
||||||
resolve(__dirname, 'webpack.config.js'),
|
|
||||||
].map((path) => statSync(path).mtime.getTime()).join(':'),
|
|
||||||
presets: [
|
|
||||||
[
|
|
||||||
'@babel/preset-env',
|
|
||||||
{
|
|
||||||
useBuiltIns: 'usage',
|
|
||||||
corejs: 3,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
],
|
|
||||||
plugins: [
|
|
||||||
[
|
|
||||||
'@babel/plugin-transform-runtime',
|
|
||||||
{
|
|
||||||
regenerator: true,
|
|
||||||
}
|
|
||||||
],
|
|
||||||
],
|
|
||||||
generatorOpts: {
|
|
||||||
compact: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in a new issue