mirror of
https://github.com/msojocs/wechat-web-devtools-linux.git
synced 2025-07-22 00:00:04 +08:00
Compare commits
56 Commits
v1.06.2307
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
5b68973fc4 | ||
|
080ee2b6df | ||
|
465af9b79a | ||
|
322de01a35 | ||
|
8c9eeed51f | ||
|
a3e75a647f | ||
|
54ce4f4565 | ||
|
4b9612b7a6 | ||
|
940cd4a12d | ||
|
bf2fbd90ed | ||
|
7972c036f2 | ||
|
75ea918b71 | ||
|
df2d94f3f2 | ||
|
2778d18e9e | ||
|
e2d698f573 | ||
|
ab106f123a | ||
|
f32e4d59c8 | ||
|
5cad0a1fac | ||
|
cab9cb805d | ||
|
99b2a42170 | ||
|
cb363c5326 | ||
|
70a2622fae | ||
|
11cee791d5 | ||
|
5fe2af43d8 | ||
|
e47ef79745 | ||
|
471984aa7b | ||
|
1a5519f125 | ||
|
23b2b57500 | ||
|
fbe81e32ba | ||
|
3ea46144c8 | ||
|
1d38da3d78 | ||
|
817c74ea86 | ||
|
a33d79f0c3 | ||
|
d9dec28b02 | ||
|
1e637f3969 | ||
|
98cbf7202e | ||
|
34c27f5d34 | ||
|
3d941dbe23 | ||
|
4c591f266a | ||
|
f41bffd96a | ||
|
285d29c48f | ||
|
d581d5aa8b | ||
|
d4b8412f98 | ||
|
c5a0c09738 | ||
|
d5b5e5a977 | ||
|
60e77b0df0 | ||
|
afb354792d | ||
|
ac06e4ad9c | ||
|
f7191c2280 | ||
|
4354a28fe5 | ||
|
7fa50693a7 | ||
|
57ccd51771 | ||
|
041d451488 | ||
|
8404792579 | ||
|
4a25d2704b | ||
|
b9874782f9 |
66
.github/workflows/build-deb.yml
vendored
Normal file
66
.github/workflows/build-deb.yml
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Build DEB Package
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
build-deb:
|
||||
name: Build DEB Package
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
ARCH: ['x86_64']
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Generate TAG
|
||||
id: Tag
|
||||
run: |
|
||||
tag='continuous'
|
||||
name='Continuous Build'
|
||||
if [ 'true' == ${{ startsWith(github.ref, 'refs/tags/') }} ];then
|
||||
tag='${{ github.ref_name }}'
|
||||
name='${{ github.ref_name }}'
|
||||
fi
|
||||
echo "tag result: $tag - $name"
|
||||
echo "::set-output name=tag::$tag"
|
||||
echo "::set-output name=name::$name"
|
||||
# https://stackoverflow.com/questions/61096521/how-to-use-gpg-key-in-github-actions
|
||||
# gpg --generate-key
|
||||
# gpg --export-secret-keys YOUR_ID_HERE | base64 > private.key
|
||||
- name: Configure GPG Key
|
||||
run: |
|
||||
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
|
||||
gpg --list-secret-keys jiyecafe@gmail.com
|
||||
env:
|
||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
sudo apt update -y
|
||||
sudo apt-get install -y build-essential fakeroot devscripts debhelper # debmake lintian pbuilder
|
||||
|
||||
- name: Build Deb Package
|
||||
run: |
|
||||
export BUILD_VERSION=${{ steps.tag.outputs.tag }}
|
||||
ls -l
|
||||
mkdir -p tmp/build
|
||||
export WINE=false
|
||||
tools/build-prepare.sh
|
||||
env WINE=false tools/build-deepin.sh ${{ steps.tag.outputs.tag }}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-deb-${{ matrix.ARCH }}.build
|
||||
path: tmp/build
|
88
.github/workflows/build-src.yml
vendored
Normal file
88
.github/workflows/build-src.yml
vendored
Normal file
@ -0,0 +1,88 @@
|
||||
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Build Base Packages
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
build-src:
|
||||
name: Build Base Packages
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
ARCH: ['x86_64']
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
echo "$UID, $GID"
|
||||
|
||||
- name: Generate TAG
|
||||
id: Tag
|
||||
run: |
|
||||
tag='continuous'
|
||||
name='Continuous Build'
|
||||
if [ 'true' == ${{ startsWith(github.ref, 'refs/tags/') }} ];then
|
||||
tag='${{ github.ref_name }}'
|
||||
name='${{ github.ref_name }}'
|
||||
fi
|
||||
echo "tag result: $tag - $name"
|
||||
echo "::set-output name=tag::$tag"
|
||||
echo "::set-output name=name::$name"
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
export ACTION_MODE=true
|
||||
ls -l
|
||||
export WINE=false
|
||||
tools/build-with-docker.sh
|
||||
|
||||
- name: Compress Resources
|
||||
run: |
|
||||
ls -l
|
||||
mkdir -p tmp/src
|
||||
rm -rf nwjs/node nwjs/node.exe
|
||||
cp node/bin/node nwjs/node
|
||||
cd nwjs && ln -s node node.exe
|
||||
cd ..
|
||||
tar -zcf tmp/src/src-linux.tar.gz bin nwjs package.nw tools
|
||||
|
||||
- name: Compress nodegit
|
||||
run: |
|
||||
ls -l
|
||||
mkdir -p tmp/build
|
||||
cp -r package.nw/node_modules/nodegit .
|
||||
tar -zcf nodegit.tar.gz nodegit
|
||||
mv nodegit.tar.gz tmp/build
|
||||
cd tmp/build
|
||||
ls -l
|
||||
|
||||
- name: View Directory
|
||||
run: |
|
||||
ls -l
|
||||
|
||||
- name: Upload src artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-${{ matrix.ARCH }}.src
|
||||
path: tmp/src
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-${{ matrix.ARCH }}.build
|
||||
path: tmp/build
|
66
.github/workflows/build-tar.yml
vendored
Normal file
66
.github/workflows/build-tar.yml
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Build tar.gz AppImage
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
build-tar:
|
||||
name: Build tar.gz AppImage
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
ARCH: ['x86_64']
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
- name: Inspect directory after downloading artifacts
|
||||
run: |
|
||||
ls -alFR wechat-devtools-*.build
|
||||
ls -alFR wechat-devtools-*.src
|
||||
- name: Prepare
|
||||
run: |
|
||||
sudo apt install -y fuse
|
||||
echo "$UID, $GID"
|
||||
|
||||
- name: Generate TAG
|
||||
id: Tag
|
||||
run: |
|
||||
tag='continuous'
|
||||
name='Continuous Build'
|
||||
if [ 'true' == ${{ startsWith(github.ref, 'refs/tags/') }} ];then
|
||||
tag='${{ github.ref_name }}'
|
||||
name='${{ github.ref_name }}'
|
||||
fi
|
||||
echo "tag result: $tag - $name"
|
||||
echo "::set-output name=tag::$tag"
|
||||
echo "::set-output name=name::$name"
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
export WINE=false
|
||||
export ACTION_MODE=true
|
||||
# tar.gz AppImage
|
||||
ls -l
|
||||
mkdir -p tmp/build
|
||||
tools/build-prepare.sh
|
||||
tools/build-release.sh ${{ matrix.ARCH }} ${{ steps.tag.outputs.tag }}
|
||||
|
||||
- name: View Directory
|
||||
run: |
|
||||
ls -l
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-simple-${{ matrix.ARCH }}.build
|
||||
path: tmp/build
|
204
.github/workflows/release.yml
vendored
204
.github/workflows/release.yml
vendored
@ -9,7 +9,11 @@ on:
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
branches: [ master, dev, 45-snap-version]
|
||||
branches: [ master, dev, ci, skyline]
|
||||
paths-ignore:
|
||||
- 'README.MD'
|
||||
- 'CHANGELOG.MD'
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
# # Allows you to run this workflow manually from the Actions tab
|
||||
@ -17,202 +21,18 @@ on:
|
||||
|
||||
jobs:
|
||||
build-src:
|
||||
name: Build Base Packages
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
ARCH: ['x86_64']
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
cd compiler && npm install
|
||||
echo "$UID, $GID"
|
||||
|
||||
- name: Generate TAG
|
||||
id: Tag
|
||||
run: |
|
||||
tag='continuous'
|
||||
name='Continuous Build'
|
||||
if [ 'true' == ${{ startsWith(github.ref, 'refs/tags/') }} ];then
|
||||
tag='${{ github.ref_name }}'
|
||||
name='${{ github.ref_name }}'
|
||||
fi
|
||||
echo "tag result: $tag - $name"
|
||||
echo "::set-output name=tag::$tag"
|
||||
echo "::set-output name=name::$name"
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
export ACTION_MODE=true
|
||||
export DOCKER_UID=$UID
|
||||
export DOCKER_GID=$GID
|
||||
ls -l
|
||||
export WINE=false
|
||||
docker-compose up
|
||||
|
||||
- name: Compress Resources
|
||||
run: |
|
||||
ls -l
|
||||
mkdir -p tmp/src
|
||||
rm -rf nwjs/node nwjs/node.exe
|
||||
cp node/bin/node nwjs/node
|
||||
cd nwjs && ln -s node node.exe
|
||||
cd ..
|
||||
tar -zcf tmp/src/src-linux.tar.gz bin nwjs package.nw tools
|
||||
|
||||
- name: Compress nodegit compiler
|
||||
run: |
|
||||
ls -l
|
||||
mkdir -p tmp/build
|
||||
cp -r package.nw/node_modules/nodegit .
|
||||
sudo rm -rf compiler/test
|
||||
tar -zcf compiler.tar.gz compiler
|
||||
tar -zcf nodegit.tar.gz nodegit
|
||||
mv nodegit.tar.gz tmp/build
|
||||
mv compiler.tar.gz tmp/build
|
||||
cd tmp/build
|
||||
ls -l
|
||||
|
||||
- name: View Directory
|
||||
run: |
|
||||
ls -l
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2.3.1
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-${{ matrix.ARCH }}.src
|
||||
path: tmp/src
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2.3.1
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-${{ matrix.ARCH }}.build
|
||||
path: tmp/build
|
||||
|
||||
uses: ./.github/workflows/build-src.yml
|
||||
secrets: inherit
|
||||
build-tar:
|
||||
name: Build tar.gz AppImage
|
||||
needs:
|
||||
- build-src
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [16.x]
|
||||
ARCH: ['x86_64']
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
cd compiler && npm install
|
||||
sudo apt install -y fuse
|
||||
echo "$UID, $GID"
|
||||
|
||||
- name: Generate TAG
|
||||
id: Tag
|
||||
run: |
|
||||
tag='continuous'
|
||||
name='Continuous Build'
|
||||
if [ 'true' == ${{ startsWith(github.ref, 'refs/tags/') }} ];then
|
||||
tag='${{ github.ref_name }}'
|
||||
name='${{ github.ref_name }}'
|
||||
fi
|
||||
echo "tag result: $tag - $name"
|
||||
echo "::set-output name=tag::$tag"
|
||||
echo "::set-output name=name::$name"
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
export WINE=false
|
||||
export ACTION_MODE=true
|
||||
# tar.gz AppImage
|
||||
ls -l
|
||||
mkdir -p tmp/build
|
||||
tools/build-prepare.sh
|
||||
tools/build-release.sh ${{ matrix.ARCH }} ${{ steps.tag.outputs.tag }}
|
||||
|
||||
- name: View Directory
|
||||
run: |
|
||||
ls -l
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2.3.1
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-${{ matrix.ARCH }}.build
|
||||
path: tmp/build
|
||||
|
||||
uses: ./.github/workflows/build-tar.yml
|
||||
secrets: inherit
|
||||
build-deb:
|
||||
name: Build DEB Package
|
||||
needs:
|
||||
- build-src
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
ARCH: ['x86_64']
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
|
||||
- name: Generate TAG
|
||||
id: Tag
|
||||
run: |
|
||||
tag='continuous'
|
||||
name='Continuous Build'
|
||||
if [ 'true' == ${{ startsWith(github.ref, 'refs/tags/') }} ];then
|
||||
tag='${{ github.ref_name }}'
|
||||
name='${{ github.ref_name }}'
|
||||
fi
|
||||
echo "tag result: $tag - $name"
|
||||
echo "::set-output name=tag::$tag"
|
||||
echo "::set-output name=name::$name"
|
||||
# https://stackoverflow.com/questions/61096521/how-to-use-gpg-key-in-github-actions
|
||||
- name: Configure GPG Key
|
||||
run: |
|
||||
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
|
||||
env:
|
||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
sudo apt-get install -y build-essential fakeroot devscripts debhelper # debmake lintian pbuilder
|
||||
|
||||
- name: Build Deb Package
|
||||
run: |
|
||||
export BUILD_VERSION=${{ steps.tag.outputs.tag }}
|
||||
ls -l
|
||||
mkdir -p tmp/build
|
||||
export WINE=false
|
||||
tools/build-prepare.sh
|
||||
env WINE=false tools/build-deepin.sh ${{ steps.tag.outputs.tag }}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2.3.1
|
||||
with:
|
||||
# Artifact name
|
||||
name: wechat-devtools-${{ matrix.ARCH }}.build
|
||||
path: tmp/build
|
||||
|
||||
uses: ./.github/workflows/build-deb.yml
|
||||
secrets: inherit
|
||||
upload:
|
||||
name: Create release and upload artifacts
|
||||
needs:
|
||||
@ -223,7 +43,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
- name: Inspect directory after downloading artifacts
|
||||
run: ls -alFR
|
||||
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
||||
[submodule "compiler"]
|
||||
path = compiler
|
||||
url = https://github.com/msojocs/wx-compiler
|
@ -1,50 +0,0 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
# 检验版本号是否匹配
|
||||
|
||||
root_dir=$(cd `dirname $0`/.. && pwd -P)
|
||||
|
||||
# 获取开发工具版本号与MD5
|
||||
VERSION_DATA=$( cat "$root_dir/conf/devtools_v" )
|
||||
VERSION_DATA=(${VERSION_DATA//,/ })
|
||||
TARGET_VERSION=${VERSION_DATA[0]}
|
||||
TARGET_VERSION_MD5=${VERSION_DATA[1]}
|
||||
|
||||
# 检查snapcraft主版本号是否正确
|
||||
SNAP_VERSION=$(grep -P "'\d+\.\d+\.\d{5,}" -o $root_dir/snap/snapcraft.yaml)
|
||||
if [ "${SNAP_VERSION//\'/}" != "$TARGET_VERSION" ];then
|
||||
echo "SNAP版本不正确!!!"
|
||||
echo "SNAP版本: ${SNAP_VERSION//\'/} != 目标版本: $TARGET_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查readme中的版本
|
||||
README_VERSION=$(grep -P '[\-`]\d+\.\d+\.\d{5,}[\-`]' -o "$root_dir/readme.md")
|
||||
for ver in $README_VERSION; do
|
||||
ver="${ver//[-\`]/}"
|
||||
if [ "${ver}" != "${TARGET_VERSION}" ];then
|
||||
echo "README中版本不正确!!!"
|
||||
echo "README中版本: ${ver} != 目标版本: ${TARGET_VERSION}"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# 检查snapcraft构建时下载的工具版本号是否正确
|
||||
SNAP_DEVTOOL_VERSION=$(cat $root_dir/snap/snapcraft.yaml | grep -P "=\d+\d+\d{5,}" -o)
|
||||
if [ "${SNAP_DEVTOOL_VERSION//=/}" != "${TARGET_VERSION//./}" ];then
|
||||
echo "SNAP工具版本不正确!!!"
|
||||
echo "snap下载版本: ${SNAP_DEVTOOL_VERSION//=/} != 目标版本: ${TARGET_VERSION//./}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 有当前版本的TAG,检查snap版本是否符合要求
|
||||
LATEST_TAG=$(git describe --abbrev=0)
|
||||
if [[ $LATEST_TAG == "v${TARGET_VERSION}"* ]];then
|
||||
SNAP_VERSION=$(grep -P "'\d+\.\d+\.\d+-\d+" -o $root_dir/snap/snapcraft.yaml)
|
||||
if [ "v${SNAP_VERSION//\'/}" != "$LATEST_TAG" ];then
|
||||
echo "SNAP版本与TAG不符!!!"
|
||||
echo "SNAP版本: v${SNAP_VERSION//\'/} != 最新TAG: $LATEST_TAG"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
@ -1,3 +1,98 @@
|
||||
# 1.06.2504010-3 / 2025-07-
|
||||
- refactor: 重构主题监听处理方案
|
||||
|
||||
# 1.06.2504010-2 / 2025-07-15
|
||||
- fix: cli使用异常。#147
|
||||
|
||||
# 1.06.2504010-1 / 2025-07-05
|
||||
- fix: 更新弹窗无法关闭。
|
||||
- update: devtools to v1.06.2504010
|
||||
|
||||
# 1.06.2503290-3 / 2025-05-23
|
||||
- update: compiler(Linux) v0.1.5
|
||||
- fix: worker无法使用 #145
|
||||
|
||||
# 1.06.2503290-2 / 2025-05-02
|
||||
- update: compiler(Linux) v0.1.4
|
||||
|
||||
# 1.06.2503290-1 / 2025-04-30
|
||||
|
||||
- update: node v16.11.0 (解决codebuddy无法使用。)
|
||||
- perf: 替换float-pigment。
|
||||
- update: devtools to v1.06.2503290
|
||||
|
||||
# 1.06.2412050-2 / 2025-02-17
|
||||
|
||||
- update: compiler(Linux) v0.1.3
|
||||
|
||||
# 1.06.2412050-1 / 2025-02-16
|
||||
|
||||
- update: devtools to v1.06.2412050
|
||||
- update: compiler(Linux) v0.1.2
|
||||
|
||||
# 1.06.2412040-1 / 2025-01-16
|
||||
|
||||
- update: devtools to v1.06.2412040
|
||||
|
||||
# 1.06.2409140-3 / 2024-11-16
|
||||
|
||||
- fix: 多开实例会出现卡死的情况
|
||||
|
||||
# 1.06.2409140-2 / 2024-11-15
|
||||
|
||||
- perf: 不对Skyline插件进行初始化(不会弹窗)
|
||||
|
||||
# 1.06.2409140-1 / 2024-10-26
|
||||
|
||||
- update: devtools to v1.06.2409140
|
||||
|
||||
# 1.06.2407120-1 / 2024-09-28
|
||||
|
||||
- update: devtools to v1.06.2407120
|
||||
|
||||
# 1.06.2405020-4 / 2024-09-28
|
||||
|
||||
- fix: 视频无法播放的问题(#118)
|
||||
|
||||
# 1.06.2405020-3 / 2024-08-10
|
||||
|
||||
- update: compiler(Linux) v0.1.1
|
||||
|
||||
# 1.06.2405020-2 / 2024-07-13
|
||||
|
||||
- fix: mock 面板按钮点击无反应
|
||||
- update: compiler(Linux) v0.1.0
|
||||
|
||||
# 1.06.2405020-1 / 2024-07-07
|
||||
|
||||
- update: devtools to v1.06.2405020
|
||||
- update: compiler(Linux) v0.0.9
|
||||
|
||||
# 1.06.2402040-1 / 2024-05-03
|
||||
|
||||
- update: devtools to v1.06.2402040
|
||||
|
||||
# 1.06.2310080-2 / 2024-01-02
|
||||
|
||||
- fix: AppImage的cli使用会闪退
|
||||
|
||||
# 1.06.2310080-1 / 2023-12-30
|
||||
|
||||
- fix: AppImage的cli使用会闪退
|
||||
- update: devtools to v1.06.2310080
|
||||
|
||||
# 1.06.2308310-3 / 2023-12-24
|
||||
|
||||
- update: compiler(Linux) v0.0.7
|
||||
|
||||
# 1.06.2308310-2 / 2023-11-10
|
||||
|
||||
- update: compiler(Linux) v0.0.6
|
||||
|
||||
# 1.06.2308310-1 / 2023-09-30
|
||||
|
||||
- update: devtools to v1.06.2308310
|
||||
|
||||
# 1.06.2307260-2 / 2023-09-23
|
||||
|
||||
- update: compiler(Linux) v0.0.5
|
@ -10,11 +10,10 @@
|
||||
----
|
||||
|
||||
[](https://github.com/msojocs/wechat-devtools-linux/actions/workflows/release.yml)
|
||||
[](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)
|
||||
[](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)
|
||||
[](https://nwjs.io/downloads/)
|
||||
[](https://nodejs.org/en/)
|
||||
[](https://aur.archlinux.org/packages/wechat-devtools)
|
||||
[](https://snapcraft.io/wechat-devtools)
|
||||
[](https://nodejs.org/en/)
|
||||
|
||||
|
||||
这是微信开发者工具 Linux版
|
||||
|
||||
@ -35,7 +34,7 @@
|
||||
|
||||
# 进度
|
||||
|
||||
当前工具可以在Linux上构筑最新版 `1.06.2209070`,支持CLI模式。
|
||||
当前工具可以在Linux上构筑最新版 `1.06.2503290`,支持CLI模式。
|
||||
另现在已经可以直接在设置界面里面修改字体,手工输入字体名称就可以。
|
||||
|
||||
# 功能测试记录
|
||||
@ -51,8 +50,8 @@
|
||||
# 系统要求
|
||||
|
||||
* 基于Linux的桌面系统,首选GNOME(其他的桌面环境可能会有问题,未测试)
|
||||
* CI自动构建的包对 glibc 和 libstdc++ 有一定的版本要求,glibc 的版本要求2.23,libstdc++ 的版本要求3.4.21
|
||||
* 如果你下载的是 `wine` 版本,那么你需要安装有 `wine` `wine-binfmt` 支持,建议版本在5.0以上,低版本可能会存在有问题
|
||||
* CI自动构建的包对 glibc 和 libstdc++ 有一定的版本要求,glibc 的版本要求>=2.23,libstdc++ 的版本要求>=3.4.21
|
||||
* ~~如果你下载的是 `wine` 版本,那么你需要安装有 `wine` `wine-binfmt` 支持,建议版本在5.0以上,低版本可能会存在有问题~~
|
||||
|
||||
# CLI支持
|
||||
|
||||
@ -69,12 +68,12 @@
|
||||
|
||||
目前支持以下平台:
|
||||
|
||||
1. [AUR](https://aur.archlinux.org/packages/wechat-devtools)
|
||||
1. 统信应用商店(deepin)
|
||||
|
||||
# 自行构建
|
||||
|
||||
> 注:
|
||||
> 如果想构建 wine 版本,请添加环境变量:`export WINE=true`
|
||||
> 如果想构建 wine 版本,请添加环境变量:`export WINE=true` 。注意:不受支持。
|
||||
|
||||
## 方法0(推荐)
|
||||
|
||||
@ -86,9 +85,9 @@
|
||||
```
|
||||
git clone --recurse-submodules https://github.com/msojocs/wechat-web-devtools-linux.git
|
||||
```
|
||||
4. 在本地项目目录中执行如下的语句,构筑开发者工具:
|
||||
4. 在本地项目目录中执行如下的语句,构建开发者工具:
|
||||
```
|
||||
docker-compose up
|
||||
tools/build-with-docker.sh
|
||||
```
|
||||
5. 在本地项目目录中执行如下的语句,可以安装应用图标(非必须):
|
||||
```
|
||||
@ -104,18 +103,18 @@
|
||||
1. 如果构建 `wine` 版本,请先在Linux环境中自行安装 `wine` `wine-binfmt`;
|
||||
2. 安装编译 `nodegit` 所需的依赖:`python2.7 python3.6及以上 libkrb5-dev gcc openssl libssh2-1-dev g++ make pkg-config` ;
|
||||
|
||||
另外 `7z` 旧版解压可能存在问题(未测试最低版本号,比如:ubuntu16.04 自带的不行),请参考 `Dockerfile`
|
||||
另外 `7z` 旧版解压可能存在问题(未测试最低版本号,比如:ubuntu16.04 自带的不行),请参考[`Dockerfile`](docker/Dockerfile)
|
||||
3. 克隆本项目:
|
||||
```
|
||||
git clone --recurse-submodules https://github.com/msojocs/wechat-web-devtools-linux.git
|
||||
```
|
||||
4. 在本地项目目录中执行如下的语句,构筑开发者工具:
|
||||
4. 在本地项目目录中执行以下命令,构建开发者工具:
|
||||
```
|
||||
./tools/setup-wechat-devtools-bash
|
||||
```
|
||||
5. 在本地项目目录中执行如下的语句,可以安装应用图标(非必须):
|
||||
```
|
||||
./tools/install-desktop-icon-node
|
||||
./tools/install-desktop-icon-bash
|
||||
```
|
||||
|
||||
之后即可通过点击应用图标启动微信开发者工具,也可以运行 `bin/wechat-devtools` 通过命令行启动
|
||||
@ -127,7 +126,7 @@
|
||||
3. 修复了nwjs上关于Menu的段错误,确保最新版本可以正常启动 (by dragonation);
|
||||
4. 在构筑过程中会重新编译node_modules,确保原生模块可以在Linux上正确运行;
|
||||
5. 下载更新可以支持断点再续,并使用了taobao国内的npm源,加速下载(稳定性待测试)。
|
||||
6. 纯 Linux 支持,使用 nodejs 实现模拟官方编译器
|
||||
6. 纯 Linux 支持,使用 cpp 实现模拟官方编译器。[wx-compiler](https://github.com/msojocs/wx-compiler)
|
||||
|
||||
# 后续计划
|
||||
|
||||
@ -154,30 +153,61 @@
|
||||
|
||||
# 赞赏
|
||||
|
||||
如果这个仓库让你感到舒适,可以点个Star或者请这个菜鸡大学生喝杯咖啡(请尽量带上github昵称):
|
||||
如果这个仓库让你感到舒适,可以点个Star或者请这个 ~~菜鸡大学生~~ 打工人喝杯咖啡(请尽量带上github昵称):
|
||||
|
||||

|
||||
|
||||
# 感谢赞赏支持
|
||||
|
||||
| 赞赏人 | 赞赏金额 |
|
||||
|-------|---------|
|
||||
| Milder | 50.00¥ |
|
||||
| [Starrah](https://github.com/Starrah) | 50.00¥ |
|
||||
| 仙人柱 | 50.00¥ |
|
||||
| . | 20.00¥ |
|
||||
| [icepie](https://github.com/icepie) | 20.00¥ |
|
||||
| 南极の短尾猫 | 20.00¥ |
|
||||
| [younland](https://github.com/younland) | 20.00¥ |
|
||||
| [guanzhengyinqin](https://github.com/guanzhengyinqin) | 20.00¥ |
|
||||
| 李喆 | 10.00¥ |
|
||||
| 陈陈菌 | 10.00¥ |
|
||||
| [chiiihc](https://github.com/chiiihc) | 10.00¥ |
|
||||
| [nsfoxer](https://github.com/nsfoxer) | 10.00¥ |
|
||||
| shaoxp | 5.00¥ |
|
||||
| david | 5.00¥ |
|
||||
| [zyk-miao](https://github.com/zyk-miao) | 5.00¥ |
|
||||
| [CoryByte](https://github.com/Corybyte) | 5.00¥ |
|
||||
时间倒序
|
||||
|
||||
| 赞赏人 | 赞赏 | 时间 |
|
||||
|-------|---------|-----|
|
||||
| returning | 10.00¥ | 2025-07-12 |
|
||||
| 👍 | 10.00¥ | 2025-07-10 |
|
||||
| hanwor | 20.00¥ | 2025-06-17 |
|
||||
| 。。。 | 10.00¥ | 2025-03-29 |
|
||||
| SakuraPuare | 20.00¥ | 2025-03-24 |
|
||||
| [senseab](https://github.com/senseab) | 50.00¥ | 2024-12-21 |
|
||||
| l | 10.00¥ | 2024-12-08 |
|
||||
| lcurk0 | 50.00¥ | 2024-11-29 |
|
||||
| [stvsl](https://github.com/stvsl) | 10.00¥ | 2024-11-26 |
|
||||
| 仙人柱 | 50.00¥ | 2024-11-20 |
|
||||
| [cabbage7th](https://github.com/cabbage7th) | 20.00¥ | 2024-10-06 |
|
||||
| [shao4598](https://github.com/shao4598) | 50.00¥ | 2024-09-24 |
|
||||
| [OWALabuy](https://github.com/OWALabuy) | 16.66¥ | 2024-08-28 |
|
||||
| [wangvation](https://github.com/wangvation) | 50.00¥ | 2024-07-16 |
|
||||
| 孤泉冷月 | 100.00¥ | 2024-07-12 |
|
||||
| [liushuai05](https://github.com/liushuai05) | 88.00¥ | 2023-12-26 |
|
||||
| LGTU | 10.00¥ | 2023-11-25 |
|
||||
| [WRXinYue](https://github.com/WRXinYue) | 10 | 2023-11-09 |
|
||||
| silentdoer | 50.00¥ | 2023-09-26 |
|
||||
| ??? | 20 |2023-08-11 |
|
||||
| Geequlim | 100 | 2023-07-12 |
|
||||
| 对方正在输入 | 10 | 2023-04-28 |
|
||||
| @DaqiongYang | 50 | 2023-03-29 |
|
||||
| AInoob | 5 | 2023-01-30 |
|
||||
| ??? | 5 | 2023-01-18 |
|
||||
| 仙人柱 | 50.00¥ | 2022-08-09 |
|
||||
| [guanzhengyinqin](https://github.com/guanzhengyinqin) | 20.00¥ | 2022-07-14 |
|
||||
| [nsfoxer](https://github.com/nsfoxer) | 10.00¥ | 2022-06-30 |
|
||||
| [chiiihc](https://github.com/chiiihc) | 5.00¥ | 2022-06-17 |
|
||||
| [younland](https://github.com/younland) | 20.00¥ | 2022-06-15 |
|
||||
| [chiiihc](https://github.com/chiiihc) | 5.00¥ | 2022-06-14 |
|
||||
| 陈陈菌 | 10.00¥ | 2022-05-29 |
|
||||
| WWW | 5.00¥ | 2022-05-26 |
|
||||
| 南极の短尾猫 | 20.00¥ | 2022-05-22 |
|
||||
| 猪宝的猪 | 20.00¥ | 2022-05-15 |
|
||||
| finalwhy | 66.60¥ | 2022-05-09 |
|
||||
| [CoryByte](https://github.com/Corybyte) | 5.00¥ | 2022-04-23 |
|
||||
| [Starrah](https://github.com/Starrah) | 50.00¥ | 2022-04-12 |
|
||||
| [zyk-miao](https://github.com/zyk-miao) | 5.00¥ | 2022-04-12 |
|
||||
| [icepie](https://github.com/icepie) | 20.00¥ | 2022-04-08 |
|
||||
| Milder | 50.00¥ | 2022-03-23 |
|
||||
| . | 20.00¥ | 2022-03-21 |
|
||||
| shaoxp | 5.00¥ | 2022-03-16 |
|
||||
| 李喆 | 10.00¥ | 2022-03-05 |
|
||||
| david | 5.00¥ | ??? |
|
||||
|
||||
# 免责声明
|
||||
|
@ -53,11 +53,11 @@ else
|
||||
fi;
|
||||
|
||||
EXTENSION1="--load-extension=$root_dir/nwjs/package.nw/js/ideplugin"
|
||||
EXTENSION2=--load-extension=$APPDATA/WeappPlugin
|
||||
EXTENSION2="--load-extension=$APPDATA/WeappPlugin/inspector"
|
||||
INSPECTOR1="--custom-devtools-frontend=file://$root_dir/package.nw/js/ideplugin/inspector" # 要加file://指明为本地文件路径
|
||||
INSPECTOR2="--custom-devtools-frontend=file://$APPDATA/WeappPlugin/inspector/"
|
||||
USERDATADIR="$APPDATA"
|
||||
|
||||
# "$@"参数
|
||||
LANG=zh_CN.UTF-8
|
||||
exec "$root_dir/nwjs/nw" $root_dir/package.nw $EXTENSION2 $INSPECTOR1 "$@"
|
||||
exec "$root_dir/nwjs/nw" $root_dir/package.nw $EXTENSION1 $INSPECTOR1 "$@"
|
@ -8,10 +8,14 @@ while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symli
|
||||
done
|
||||
root_dir="$( cd -P "$( dirname "$SOURCE" )"/.. >/dev/null 2>&1 && pwd )"
|
||||
|
||||
cd $root_dir
|
||||
cd $root_dir/bin
|
||||
|
||||
export WECHAT_DEVTOOLS_DIR="$root_dir/nwjs"
|
||||
export APPDATA="$root_dir/nwjs"
|
||||
export PATH="$root_dir/node/bin:$root_dir/nwjs:$PATH"
|
||||
|
||||
node $root_dir/package.nw/js/common/cli/index.js "$@"
|
||||
if [ ! -z "$APPIMAGE" ];then
|
||||
# AppImage在程序退出后会删除相关程序文件,导致无法启动
|
||||
tail -f /etc/issue
|
||||
fi
|
1
compiler
1
compiler
@ -1 +0,0 @@
|
||||
Subproject commit a780f231d31025a37667a70f82d8cde0cec8836d
|
@ -1 +1 @@
|
||||
WX_COMPILER_VERSION=v0.0.5
|
||||
WX_COMPILER_VERSION=v0.1.5
|
@ -1 +1 @@
|
||||
1.06.2307260,e553984804c01a56f15c55e55a4b8c33
|
||||
1.06.2504010,6a579ac93961fbfe04774b26f0c85b78
|
@ -1,6 +1,6 @@
|
||||
# 此处版本应与nwjs使用的node版本一致
|
||||
if [ -z $NODE_VERSION ];then
|
||||
NODE_VERSION=16.4.2
|
||||
NODE_VERSION=16.11.0
|
||||
fi
|
||||
NODE_URL_CN=https://npmmirror.com/mirrors/node/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz
|
||||
NODE_URL_GLOBAL=https://nodejs.org/download/release/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz
|
||||
|
@ -1,19 +0,0 @@
|
||||
version: "3"
|
||||
services:
|
||||
wechat_devtools:
|
||||
image: jiyecafe/wechat-devtools-build:v3
|
||||
# build:
|
||||
# context: ./docker
|
||||
# dockerfile: Dockerfile
|
||||
volumes:
|
||||
- .:/workspace
|
||||
- ./cache/.npm:/root/.npm
|
||||
environment:
|
||||
- ACTION_MODE=${ACTION_MODE:-false}
|
||||
# - https_proxy=${https_proxy:-}
|
||||
- WINE=${WINE:-false}
|
||||
- LOCAL_USER_ID=${DOCKER_UID:-1000}
|
||||
- LOCAL_GROUP_ID=${DOCKER_GID:-1000}
|
||||
- BUILD_VERSION=${BUILD_VERSION:-v0}
|
||||
entrypoint: /workspace/docker/docker-entrypoint
|
||||
userns_mode: "host"
|
@ -4,6 +4,7 @@ WORKDIR /workspace
|
||||
|
||||
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
|
||||
sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
|
||||
sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
|
||||
sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
|
||||
mkdir -p /build_temp/python36 /build_temp/nodejs && \
|
||||
apt update && \
|
||||
@ -27,7 +28,7 @@ RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
|
||||
./setup_16.x &&\
|
||||
apt-get install -y nodejs &&\
|
||||
rm -rf /build_temp && \
|
||||
apt install -y gosu && \
|
||||
apt install -y gosu unzip python && \
|
||||
gosu nobody true && \
|
||||
useradd -s /bin/bash -m user
|
||||
|
||||
|
@ -1,26 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
|
||||
strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_2.2
|
||||
|
||||
notice() {
|
||||
echo -e "\033[36m $1 \033[0m "
|
||||
}
|
||||
|
||||
rm -rf /tmp/vscode-ripgrep-cache-1.13.2/ripgrep-v13.0.0-4-x86_64-unknown-linux-musl.tar.gz
|
||||
|
||||
if [ "$(id -u)" -eq '0' ];then
|
||||
USER_ID=${LOCAL_USER_ID:-1000}
|
||||
GROUP_ID=${LOCAL_GROUP_ID:-1000}
|
||||
notice "$USER_ID, $GROUP_ID"
|
||||
usermod -u ${USER_ID} -g ${GROUP_ID} user > /dev/null 2>&1
|
||||
chown -R ${USER_ID}:${GROUP_ID} /workspace > /dev/null 2>&1
|
||||
|
||||
# ls -l
|
||||
# cat /etc/passwd
|
||||
exec gosu user docker/entrypoint
|
||||
|
||||
fi
|
||||
|
||||
echo "nothing"
|
||||
# exec /usr/local/bin/gosu user entrypoint
|
@ -24,9 +24,11 @@ python --version
|
||||
echo "docker node version: $( node --version )"
|
||||
|
||||
cd /workspace
|
||||
export HOME="/tmp/home"
|
||||
mkdir -p /tmp/home
|
||||
#
|
||||
# exec ./tools/rebuild-node-modules 0.53.1
|
||||
./tools/setup-wechat-devtools-bash
|
||||
./tools/setup-wechat-devtools.sh
|
||||
|
||||
# chmod -R 777 tmp node nwjs package.nw
|
||||
# ls -l package.nw
|
||||
|
32
package-lock.json
generated
32
package-lock.json
generated
@ -1,32 +0,0 @@
|
||||
{
|
||||
"name": "workspace",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"husky": "^7.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/husky": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmmirror.com/husky/-/husky-7.0.4.tgz",
|
||||
"integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"husky": "lib/bin.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"husky": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmmirror.com/husky/-/husky-7.0.4.tgz",
|
||||
"integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"scripts": {
|
||||
"prepare": "husky install"
|
||||
},
|
||||
"devDependencies": {
|
||||
"husky": "^7.0.4"
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@ _wechat_devtools_md5="2785d569b88d72a8e238d438d92faf44"
|
||||
_wechat_devtools_exe="wechat_devtools_${_wechat_devtools_ver}_x64.exe"
|
||||
_nwjs_ver="0.55.0"
|
||||
_install_dir="/opt/wechat-devtools"
|
||||
_node_version="16.4.2"
|
||||
_node_version="16.11.0"
|
||||
|
||||
pkgname=wechat-devtools
|
||||
pkgver="${_wechat_devtools_ver}" # 主版本号
|
||||
@ -89,7 +89,7 @@ build() {
|
||||
_log "prepare nw-gyp"
|
||||
node --version
|
||||
npm uninstall node-gyp -g
|
||||
npm install nw-gyp node-gyp -g
|
||||
npm install nw-gyp@3.6.6 node-gyp -g
|
||||
|
||||
# node bin
|
||||
_log "copy node exectuable"
|
||||
|
@ -12,10 +12,17 @@ DH_VERBOSE = 1
|
||||
# package maintainers to append LDFLAGS
|
||||
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
|
||||
|
||||
# 1.20.9ubuntu1 -> 1.20.9ubuntu2修改了默认打包工具为zstd,导致统信平台不能识别,强制设定为xz
|
||||
# changelog: https://launchpad.net/ubuntu/+source/dpkg/1.20.9ubuntu2
|
||||
override_dh_builddeb:
|
||||
dh_builddeb -- -Zxz
|
||||
|
||||
override_dh_strip_nondeterminism:
|
||||
|
||||
override_dh_shlibdeps:
|
||||
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
|
||||
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info -Xswc.linux-x64-musl.node
|
||||
override_dh_strip:
|
||||
dh_strip --no-automatic-dbgsym
|
||||
|
||||
%:
|
||||
dh "$@"
|
||||
|
29
res/scripts/cli.js
Normal file
29
res/scripts/cli.js
Normal file
@ -0,0 +1,29 @@
|
||||
(() => {
|
||||
process.argv[0] = 'wechat-devtools-cli'
|
||||
process.env.USERPROFILE = require('os').homedir()
|
||||
Object.defineProperty(global, 'userDirPath', {
|
||||
set: function(value) {
|
||||
if (value.includes('AppData/Local')) {
|
||||
value = value.replace('AppData/Local', '.config')
|
||||
value = value.replace(/User Data\/.*?\//, '')
|
||||
// value = value.replace('~', require('os').homedir())
|
||||
}
|
||||
this._userDirPath = value
|
||||
},
|
||||
get: function() {
|
||||
return this._userDirPath
|
||||
}
|
||||
})
|
||||
// appPath
|
||||
Object.defineProperty(global, 'appPath', {
|
||||
set: function(value) {
|
||||
if (value.includes('.exe')) {
|
||||
value = value.replace('.exe', '')
|
||||
}
|
||||
this._appPath = value
|
||||
},
|
||||
get: function() {
|
||||
return this._appPath
|
||||
}
|
||||
})
|
||||
})();
|
11
res/scripts/entrance.js
Normal file
11
res/scripts/entrance.js
Normal file
@ -0,0 +1,11 @@
|
||||
(() => {
|
||||
const http = require('http')
|
||||
const originaleListen = http.Server.prototype.listen
|
||||
http.Server.prototype.listen = function(...args) {
|
||||
if (args[0] == 33233) {
|
||||
console.warn('block port of http server:', args[0])
|
||||
return
|
||||
}
|
||||
return originaleListen.apply(this, args)
|
||||
}
|
||||
})();
|
347
res/scripts/hackrequire.js
Normal file
347
res/scripts/hackrequire.js
Normal file
@ -0,0 +1,347 @@
|
||||
/* patch wechat devtools begin */
|
||||
(() => {
|
||||
try {
|
||||
{
|
||||
// 修正编译器路径
|
||||
const originalSpawn = require("child_process").spawn;
|
||||
require("child_process").spawn = function (command, args, options) {
|
||||
if (command.includes("wcc.exe")) {
|
||||
command = command.replace("code/package.nw", "package.nw");
|
||||
command = command.replace("wcc.exe", "wcc");
|
||||
} else if (command.includes("wcsc.exe")) {
|
||||
command = command.replace("code/package.nw", "package.nw");
|
||||
command = command.replace("wcsc.exe", "wcsc");
|
||||
}
|
||||
return originalSpawn.apply(this, [command, args, options]);
|
||||
};
|
||||
}
|
||||
{
|
||||
// 修正路径错误
|
||||
const originalResolve = require("path").resolve;
|
||||
require("path").resolve = function (...paths) {
|
||||
if (paths.length === 2 && paths[1].includes("code/package.nw")) {
|
||||
paths[1] = paths[1].replace("code/package.nw", "package.nw");
|
||||
}
|
||||
return originalResolve.apply(this, paths);
|
||||
};
|
||||
}
|
||||
if (typeof nw === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
let log = function (content) {
|
||||
process.stderr.write(content + "\n");
|
||||
};
|
||||
|
||||
let originMenuItem = nw.MenuItem;
|
||||
nw.MenuItem = function MenuItem(options) {
|
||||
|
||||
options = Object.assign({}, options);
|
||||
|
||||
delete options.shortcutName;
|
||||
delete options.shouldEnabled;
|
||||
|
||||
if (options.label && (typeof options.label === "string")) {
|
||||
|
||||
if (options.label.indexOf("[") !== -1) {
|
||||
let rest = options.label.split("[").slice(1).join("[").trim();
|
||||
if (rest[rest.length - 1] === "]") {
|
||||
rest = rest.slice(0, -1).split("+").map((x) => {
|
||||
if (!x) { return "+" }
|
||||
switch (x) {
|
||||
case "↓": { return "Down"; }
|
||||
case "↑": { return "Up"; }
|
||||
case "PAGE↓": { return "PageDown"; }
|
||||
case "PAGE↑": { return "PageUp"; }
|
||||
case "←": { return "Left"; }
|
||||
case "→": { return "Right"; }
|
||||
default: { return x; }
|
||||
}
|
||||
});
|
||||
if (rest.length > 1) {
|
||||
options.key = rest[rest.length - 1];
|
||||
options.modifiers = rest.slice(0, -1).join("+");
|
||||
} else {
|
||||
options.key = rest[0];
|
||||
}
|
||||
}
|
||||
options.label = options.label.split("[")[0];
|
||||
}
|
||||
|
||||
if (options.label.indexOf("(&") !== -1) {
|
||||
options.label = options.label.split("(&")[0];
|
||||
}
|
||||
options.label = options.label.replace("&", "").trim();
|
||||
|
||||
switch (options.label) {
|
||||
case "Go to Declaration": { options.label = "转到声明"; break; }
|
||||
case "Go to References": { options.label = "转到引用"; break; }
|
||||
case "Find All References": { options.label = "查找所有引用"; break; }
|
||||
case "Find All Implementations": { options.label = "查找所有实现"; break; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new originMenuItem(options);
|
||||
|
||||
};
|
||||
|
||||
let originAppend = nw.Menu.prototype.append;
|
||||
nw.Menu.prototype.append = function (item) {
|
||||
|
||||
if (item.parentMenu) {
|
||||
item.parentMenu.remove(item);
|
||||
}
|
||||
item.parentMenu = this;
|
||||
|
||||
if ((this.items.length > 0) &&
|
||||
(this.items[this.items.length - 1].type === "separator") &&
|
||||
(item.type === "separator")) {
|
||||
originInsert.call(this, item, this.items.length);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((this.items.length === 0) && (item.type === "separator")) {
|
||||
originInsert.call(this, item, this.items.length);
|
||||
return;
|
||||
}
|
||||
|
||||
return originAppend.call(this, item);
|
||||
};
|
||||
|
||||
let originInsert = nw.Menu.prototype.insert;
|
||||
nw.Menu.prototype.insert = function (item, index) {
|
||||
if (item.parentMenu) {
|
||||
item.parentMenu.remove(item);
|
||||
}
|
||||
item.parentMenu = this;
|
||||
return originInsert.call(this, item, index);
|
||||
};
|
||||
{
|
||||
// 修正新窗口数据丢失的问题
|
||||
const originalOpen = nw.Window.open
|
||||
nw.Window.open = function (url, options, callback) {
|
||||
console.warn('[wechat-devtools] nw.Window.open is called, url:', url, 'options:', options);
|
||||
let cb = callback
|
||||
if (options.title === '版本更新提示') {
|
||||
options.inject_js_start = 'js/unpack/hackrequire/index.js';
|
||||
cb = (...args) => {
|
||||
const keys = [
|
||||
"shareData",
|
||||
"windowMap",
|
||||
"isSimple",
|
||||
"masterProxyPort",
|
||||
"proxyPort",
|
||||
"masterH2ProxyPort",
|
||||
"h2ProxyPort"
|
||||
];
|
||||
for(let k of keys)
|
||||
args[0].window.global[k] = global[k];
|
||||
callback(...args)
|
||||
}
|
||||
}
|
||||
else if (options.title === '云开发控制台') {
|
||||
cb = (...args) => {
|
||||
const keys = [
|
||||
"shareData",
|
||||
"windowMap",
|
||||
"isSimple",
|
||||
"masterProxyPort",
|
||||
"proxyPort",
|
||||
"masterH2ProxyPort",
|
||||
"h2ProxyPort",
|
||||
'tokenData',
|
||||
];
|
||||
for(let k of keys)
|
||||
args[0].window.global[k] = global[k];
|
||||
callback(...args)
|
||||
}
|
||||
}
|
||||
else if (options.title.includes('微信开发者工具')) {
|
||||
cb = (...args) => {
|
||||
const keys = [
|
||||
"shareData",
|
||||
"windowMap",
|
||||
"isSimple",
|
||||
"masterProxyPort",
|
||||
"proxyPort",
|
||||
"masterH2ProxyPort",
|
||||
"h2ProxyPort",
|
||||
'tokenData',
|
||||
];
|
||||
for(let k of keys)
|
||||
args[0].window.global[k] = global[k];
|
||||
callback(...args)
|
||||
}
|
||||
}
|
||||
return originalOpen.apply(this, [url, options, cb])
|
||||
}
|
||||
}
|
||||
{
|
||||
// 修正打开外部Terminal的功能
|
||||
const originalExec = require('child_process').exec;
|
||||
require('child_process').exec = function (command, options, callback) {
|
||||
if (command.includes('open -a Terminal')) {
|
||||
command = 'gnome-terminal'
|
||||
}
|
||||
return originalExec.apply(this, [command, options, callback])
|
||||
}
|
||||
}
|
||||
{
|
||||
// 修正 暗色/亮色 自动跟随系统
|
||||
const {spawn, execSync} = require('child_process')
|
||||
let isDark = (function () {
|
||||
try {
|
||||
const { DESKTOP_SESSION } = process.env;
|
||||
console.log(DESKTOP_SESSION);
|
||||
let theme = "";
|
||||
switch (DESKTOP_SESSION) {
|
||||
case "deepin":
|
||||
theme = execSync(
|
||||
`gsettings get com.deepin.dde.appearance gtk-theme`
|
||||
);
|
||||
break;
|
||||
case "gnome":
|
||||
case "gnome-classic":
|
||||
theme = execSync(
|
||||
`gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`
|
||||
);
|
||||
break;
|
||||
|
||||
case "plasma":
|
||||
theme = execSync(
|
||||
`gsettings get org.gnome.desktop.interface color-scheme`,
|
||||
);
|
||||
break;
|
||||
default:
|
||||
console.warn(
|
||||
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
|
||||
);
|
||||
break;
|
||||
}
|
||||
console.log(theme.toString());
|
||||
return theme.toString().toLowerCase().includes("dark");
|
||||
} catch (error) {
|
||||
console.error("尝试获取主题信息失败,使用默认暗色");
|
||||
return true;
|
||||
}
|
||||
})()
|
||||
const originalMatchMedia = window.matchMedia
|
||||
window.matchMedia = function (...args) {
|
||||
console.warn('----------------> matchMedia:', ...args)
|
||||
const mm = originalMatchMedia.apply(this, args)
|
||||
Object.defineProperty(mm, 'matches', {
|
||||
get(){
|
||||
return isDark
|
||||
}
|
||||
})
|
||||
return mm
|
||||
}
|
||||
class CheckDark {
|
||||
// 监听gsettings monitor org.gnome.desktop.interface gtk-theme
|
||||
monitorTheme(callback) {
|
||||
try {
|
||||
if (this.callback) {
|
||||
this.callback = callback
|
||||
return;
|
||||
}
|
||||
this.callback = callback
|
||||
let monitor = null;
|
||||
const { DESKTOP_SESSION } = process.env;
|
||||
switch (DESKTOP_SESSION) {
|
||||
case "deepin":
|
||||
monitor = spawn("gsettings", [
|
||||
"monitor",
|
||||
"com.deepin.dde.appearance",
|
||||
"gtk-theme",
|
||||
]);
|
||||
break;
|
||||
case "gnome":
|
||||
case "gnome-classic":
|
||||
monitor = spawn("gsettings", [
|
||||
"monitor",
|
||||
"org.gnome.desktop.interface",
|
||||
this.gnomeScheme,
|
||||
]);
|
||||
break;
|
||||
case "plasma":
|
||||
monitor = spawn("gsettings", [
|
||||
"monitor",
|
||||
"org.gnome.desktop.interface",
|
||||
'color-scheme',
|
||||
]);
|
||||
break;
|
||||
default:
|
||||
console.warn(
|
||||
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
|
||||
);
|
||||
break;
|
||||
}
|
||||
monitor &&
|
||||
monitor.on("error", (err) => {
|
||||
console.error("monitorTheme", err);
|
||||
});
|
||||
monitor &&
|
||||
monitor.stdout.on("data", (chunk) => {
|
||||
const data = chunk.toString();
|
||||
console.warn('Theme changed:', data)
|
||||
isDark = data.toLowerCase().includes("dark");
|
||||
this.callback(isDark)
|
||||
});
|
||||
process.on("SIGTERM", (signal) => {
|
||||
monitor.kill(signal);
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("尝试监听主题失败!", err);
|
||||
}
|
||||
}
|
||||
get gnomeScheme() {
|
||||
try {
|
||||
// 判断 Gnome-Shell 版本 from @icepie
|
||||
const gnomeVersion = execSync(`gnome-shell --version`)
|
||||
.toString()
|
||||
.replace(/[\r\n]/g, "")
|
||||
.split(" ");
|
||||
const gnomeVersionNum =
|
||||
gnomeVersion.length == 3 ? Number(gnomeVersion[2]) : 0;
|
||||
return gnomeVersionNum >= 42 ? "color-scheme" : "gtk-theme";
|
||||
} catch (err) {
|
||||
console.error("检查gnome版本失败, 使用gtk-theme", err);
|
||||
return "gtk-theme";
|
||||
}
|
||||
}
|
||||
}
|
||||
const checkDark = new CheckDark()
|
||||
const original = MediaQueryList.prototype.addEventListener
|
||||
MediaQueryList.prototype.addEventListener = function (...args) {
|
||||
console.warn('----------> MediaQueryList.addEventListener:', ...args)
|
||||
checkDark.monitorTheme((isDark) => {
|
||||
args[1]({
|
||||
matches: isDark
|
||||
})
|
||||
})
|
||||
return original.apply(this, args)
|
||||
}
|
||||
}
|
||||
{
|
||||
// 修复云开发控制台
|
||||
const originalBind = Function.prototype.bind
|
||||
Function.prototype.bind = function(...args) {
|
||||
if (args[0]?._tokenMap) {
|
||||
console.warn('---------set tokenData')
|
||||
if (window.tokenData) {
|
||||
args[0]._sessionToken = window.tokenData._sessionToken
|
||||
args[0]._tokenMap = window.tokenData._tokenMap
|
||||
}
|
||||
else
|
||||
window.tokenData = args[0]
|
||||
}
|
||||
return originalBind.apply(this, args)
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
process.stderr.write(error.message);
|
||||
process.stderr.write(error.stack);
|
||||
}
|
||||
})();
|
||||
/* patch wechat devtools end */
|
9
test/nw-simple/index.html
Normal file
9
test/nw-simple/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<!-- <video src="https://vjs.zencdn.net/v/oceans.mp4"></video> -->
|
||||
<hr />
|
||||
<video autoplay width="320" height="240" controls>
|
||||
<source src="https://media.w3.org/2010/05/sintel/trailer.mp4" type="video/mp4">
|
||||
您的浏览器不支持 HTML5 video 标签。
|
||||
</video>
|
||||
<script>
|
||||
// window.open('chrome://media-internals/')
|
||||
</script>
|
4
test/nw-simple/package.json
Normal file
4
test/nw-simple/package.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "test",
|
||||
"main": "index.html"
|
||||
}
|
@ -3,7 +3,7 @@ const { execSync, spawn } = require("child_process");
|
||||
|
||||
class CheckDark {
|
||||
// 监听gsettings monitor org.gnome.desktop.interface gtk-theme
|
||||
monitorTheme() {
|
||||
monitorTheme(callback) {
|
||||
try {
|
||||
let monitor = null;
|
||||
const { DESKTOP_SESSION } = process.env;
|
||||
@ -37,11 +37,8 @@ class CheckDark {
|
||||
monitor.stdout.on("data", (chunk) => {
|
||||
// TODO: 防抖动包装
|
||||
const data = chunk.toString();
|
||||
const t = data.toLowerCase().includes("dark");
|
||||
console.log(data);
|
||||
console.log("dark", t);
|
||||
// (this._theme = t ? i.Dark : i.Light),
|
||||
// this._onDidThemeChange.fire(this._theme);
|
||||
const isDark = data.toLowerCase().includes("dark");
|
||||
callback(isDark)
|
||||
});
|
||||
process.on("SIGTERM", (signal) => {
|
||||
monitor.kill(signal);
|
||||
@ -83,7 +80,7 @@ class CheckDark {
|
||||
}
|
||||
get gnomeScheme() {
|
||||
try {
|
||||
// 判断 Gnome-Shell 版本
|
||||
// 判断 Gnome-Shell 版本 from @icepie
|
||||
const gnomeVersion = execSync(`gnome-shell --version`)
|
||||
.toString()
|
||||
.replace(/[\r\n]/g, "")
|
||||
@ -98,7 +95,9 @@ class CheckDark {
|
||||
}
|
||||
}
|
||||
const cd = new CheckDark();
|
||||
cd.monitorTheme();
|
||||
cd.monitorTheme((isDark) => {
|
||||
console.info('is dark:', isDark)
|
||||
});
|
||||
console.log(cd.isDark);
|
||||
|
||||
function original() {
|
||||
|
10
test/wxvpkg-test
Normal file → Executable file
10
test/wxvpkg-test
Normal file → Executable file
@ -4,12 +4,4 @@ root_dir=$(cd `dirname $0`/.. && pwd -P)
|
||||
tmp_dir="$root_dir/tmp"
|
||||
|
||||
# unpack 文件 到 路径
|
||||
node "$root_dir/tools/wxvpkg/unpack" "$tmp_dir/core.wxvpkg" "$tmp_dir/core.wxvpkg.ext"
|
||||
|
||||
# pack 路径 到 文件
|
||||
node "$root_dir/tools/wxvpkg/pack" "$tmp_dir/core.wxvpkg.ext" "$tmp_dir/core.wxvpkg.test"
|
||||
|
||||
# unpack 文件 到 路径
|
||||
rm -rf "$tmp_dir/core.wxvpkg.ext1"
|
||||
node "$root_dir/tools/wxvpkg/unpack" "$tmp_dir/core.wxvpkg.test" "$tmp_dir/core.wxvpkg.ext1"
|
||||
|
||||
node "$root_dir/tools/wxvpkg_unpack.js" "/home/msojocs/.config/wechat-devtools/WeappVendor/3.8.5.wxvpkg" "/home/msojocs/.config/wechat-devtools/WeappVendor/3.8.5.wxvpkg.ext"
|
||||
|
@ -100,7 +100,7 @@ cd "$build_dir"
|
||||
ls -l "$build_dir"
|
||||
mkdir -p "$root_dir/tmp/build"
|
||||
|
||||
if [[ "$WINE" != 'false' ]];then
|
||||
if [[ "$WINE" == 'true' ]];then
|
||||
echo "添加wine依赖 - $WINE"
|
||||
echo "Depends: wine, wine-binfmt" >> "$build_dir/debian/control"
|
||||
fi
|
||||
|
6
tools/build-with-docker.sh
Executable file
6
tools/build-with-docker.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
root_dir=$(cd `dirname $0`/.. && pwd -P)
|
||||
echo "$(id -u):$(id -g)"
|
||||
docker run -u "$(id -u):$(id -g)" --rm -i -e "ACTION_MODE=${ACTION_MODE:-false}" -w /workspace -v "$root_dir:/workspace" jiyecafe/wechat-devtools-build:v1.0.4 \
|
||||
bash ./docker/entrypoint
|
@ -11,7 +11,8 @@ fi
|
||||
|
||||
cd "$NW_PACKAGE_DIR"
|
||||
|
||||
sed -i 's#AppData/Local/\${global.userDirName}/User Data/\${global.productHash}/Default#.config/\${global.userDirName}/Default#g' js/common/cli/index.js
|
||||
sed -i 's#USERPROFILE#HOME#g' js/common/cli/index.js
|
||||
sed -i 's#`./\${global.appname}.exe`#`./bin/\${global.appname}`#g' js/common/cli/index.js
|
||||
sed -i 's#,""));const T#,""));_.$0="wechat-devtools-cli";const T#' js/common/cli/index.js
|
||||
cd $root_dir/package.nw/js/common/cli
|
||||
cat $root_dir/res/scripts/cli.js > temp.js
|
||||
cat index.js >> temp.js
|
||||
rm index.js
|
||||
mv temp.js index.js
|
@ -37,61 +37,17 @@ node "$unpack_script" "$package_dir/core.wxvpkg" "$tmp_dir/core.wxvpkg"
|
||||
# |_| \_\_____|_| |_____/_/ \_\____|_____| \____\___/|_| \_\_____|
|
||||
#
|
||||
|
||||
# find
|
||||
open_find_result=$( grep -lr "this.props.onWindowOpenFail());if" "$tmp_dir/core.wxvpkg" )
|
||||
echo "云开发控制台启动点: $open_find_result"
|
||||
if [[ ! -z $open_find_result ]];then
|
||||
# replace
|
||||
new_cb_handle="this.props.onWindowOpenFail());Object.keys(window).forEach(key=>{if(!e.window[key]){try{e.window[key]=window[key];}catch(e){console.error(e);}}});"
|
||||
sed -i "s/this.props.onWindowOpenFail());/$new_cb_handle/g" $open_find_result
|
||||
else
|
||||
warn "云开发控制台启动点未找到"
|
||||
fi
|
||||
|
||||
token_find_result=$( grep -lr "constructor(){this._sessionToken=\"\",this._tokenMap={}}" "$tmp_dir/core.wxvpkg" )
|
||||
echo "WebSocket token存储对象位置: $token_find_result"
|
||||
if [[ ! -z $token_find_result ]];then
|
||||
new_constructor="constructor(){if(window.tokenData){/*有就直接用*/this._sessionToken=window.tokenData._sessionToken;this._tokenMap=window.tokenData._tokenMap;}else{/*没有就新建*/this._sessionToken=\"\",this._tokenMap={};window.tokenData=this;/*新建完要给中间人*/}}"
|
||||
sed -i "s#constructor(){this._sessionToken=\"\",this._tokenMap={}}#$new_constructor#g" "$token_find_result"
|
||||
else
|
||||
warn "WebSocket token存储对象位置未找到"
|
||||
fi
|
||||
|
||||
# open -a Terminal "`pwd`" --> gnome-terminal
|
||||
notice "fix terminal"
|
||||
find_result=$( grep -lr 'open -a Terminal "`pwd`"' "$tmp_dir/core.wxvpkg" )
|
||||
echo "Terminal启动位置: $find_result"
|
||||
if [[ ! -z $find_result ]];then
|
||||
new_str="gnome-terminal"
|
||||
sed -i "s#open -a Terminal \"\`pwd\`\"#$new_str#g" "$find_result"
|
||||
else
|
||||
warn "Terminal启动位置未找到"
|
||||
fi
|
||||
# token_find_result=$( grep -lr "constructor(){this._sessionToken=\"\",this._tokenMap={}}" "$tmp_dir/core.wxvpkg" )
|
||||
# echo "WebSocket token存储对象位置: $token_find_result"
|
||||
# if [[ ! -z $token_find_result ]];then
|
||||
# new_constructor="constructor(){if(window.tokenData){/*有就直接用*/this._sessionToken=window.tokenData._sessionToken;this._tokenMap=window.tokenData._tokenMap;}else{/*没有就新建*/this._sessionToken=\"\",this._tokenMap={};window.tokenData=this;/*新建完要给中间人*/}}"
|
||||
# sed -i "s#constructor(){this._sessionToken=\"\",this._tokenMap={}}#$new_constructor#g" "$token_find_result"
|
||||
# else
|
||||
# warn "WebSocket token存储对象位置未找到"
|
||||
# fi
|
||||
|
||||
# wcc、wcsc处理,设置WINE=fasle环境变量生效
|
||||
if [[ "$WINE" != 'true' ]];then
|
||||
# "wcc.exe":!0,"wcsc.exe":!0
|
||||
find_result=$( grep -lr 'wcc-exec' "$tmp_dir/core.wxvpkg" )
|
||||
echo "wcc: $find_result"
|
||||
if [[ ! -z $find_result ]];then
|
||||
# new_str='{"wcc.bin":!0,"wcsc.bin":!0,wcc:!0,wcsc:!0}'
|
||||
# sed -i "s#{wcc:!0,wcsc:!0}#$new_str#g" "$find_result"
|
||||
# new_str='"linux"===process.platform'
|
||||
# sed -i "s#\"darwin\"===process.platform#$new_str#g" "$find_result"
|
||||
|
||||
# return_exp_wcc=$(cat $find_result | grep -P 'return [a-z]+\("wcc"\)' -o) # return ?("wcc")
|
||||
# return_exp_wcc_replace="${return_exp_wcc//wcc/wcc.bin}" # return ?("wcc.bin")
|
||||
# return_exp_wcc_replace="${return_exp_wcc//return /${return_exp_wcc_replace},}" # return ?("wcc.bin")
|
||||
|
||||
# return_exp_wcsc=$(cat $find_result | grep -P 'return [a-z]+\("wcsc"\)' -o) # return ?("wcsc")
|
||||
# return_exp_wcsc_replace="${return_exp_wcc_replace//wcc/wcsc}"
|
||||
|
||||
sed -i "s#wcc\\.exe#wcc#g" "$find_result"
|
||||
sed -i "s#wcsc\\.exe#wcsc#g" "$find_result"
|
||||
sed -i "s#code/package.nw#package.nw#g" "$find_result"
|
||||
else
|
||||
warn "wcc位置未找到"
|
||||
fi
|
||||
# 处理报错时控制台显示的环境
|
||||
find_result=$( grep -lr '(env:' "$tmp_dir/core.wxvpkg" )
|
||||
echo "env: $find_result"
|
||||
@ -108,30 +64,6 @@ if [[ "$WINE" != 'true' ]];then
|
||||
echo $timeStamp > "${package_dir}/.build_time"
|
||||
fi
|
||||
|
||||
# fix theme
|
||||
notice "fix theme"
|
||||
find_result=$( grep -lr "OSThemeController=" "$tmp_dir/core.wxvpkg" )
|
||||
echo "theme: $find_result"
|
||||
if [[ -n $find_result ]];then
|
||||
# require of child_process
|
||||
sed -i 's/"use strict";O/"use strict";const {execSync,spawn}=require("child_process");O/' $find_result
|
||||
# replace listener to monitor
|
||||
sed -i 's/this.registerListeners()/this.monitorTheme()/' $find_result
|
||||
# replace check func
|
||||
sed -i 's/mediaQuery.matches/isDark/' $find_result
|
||||
# add functions
|
||||
sed -i 's#}getDefaultTheme#}get isDark(){try{const{DESKTOP_SESSION}=process.env;console.log(DESKTOP_SESSION);let theme="";switch(DESKTOP_SESSION){case"deepin":theme=execSync(`gsettings get com.deepin.dde.appearance gtk-theme`);break;case"gnome":case"gnome-classic":theme=execSync(`gsettings get org.gnome.desktop.interface ${this.gnomeScheme}`);break;default:break}return theme.includes("dark");}catch(err){console.error("尝试获取主题信息失败,使用默认暗色",err);return true;}}get gnomeScheme(){try{const gnomeVersion=execSync(`gnome-shell --version`).toString().replace(/[\\r\\n]/g,"").split(" ");const gnomeVersionNum=gnomeVersion.length==3?Number(gnomeVersion[2]):0;return gnomeVersionNum>=42?"color-scheme":"gtk-theme";}catch(err){console.error("检查gnome版本失败, 使用gtk-theme", err);return "gtk-theme";}}monitorTheme(){try{let monitor=null;const{DESKTOP_SESSION}=process.env;switch(DESKTOP_SESSION){case"deepin":monitor=spawn("gsettings",["monitor","com.deepin.dde.appearance","gtk-theme",]);break;case"gnome":case"gnome-classic":monitor=spawn("gsettings",["monitor","org.gnome.desktop.interface",this.gnomeScheme,]);break;default:console.warn(`NOT SUPPORTED!!!DESKTOP_SESSION:${DESKTOP_SESSION}`);break}monitor\&\&monitor.on("error",(err)=>{console.error("monitorTheme",err)});monitor\&\&monitor.stdout.on("data",e.debounce((chunk)=>{const data=chunk.toString();const t=data.toLowerCase().includes("dark");(this._theme=t?i.Dark:i.Light),this._onDidThemeChange.fire(this._theme)},400));process.on("SIGTERM",(signal)=>{monitor.kill(signal);});}catch(err){console.error("尝试监听主题失败!", err);}}getDefaultTheme#' $find_result
|
||||
else
|
||||
warn "theme位置未找到"
|
||||
fi
|
||||
|
||||
# fix update check
|
||||
notice "fix update check"
|
||||
sed -i 's#</body><script src=../js/core#</body><script src="../js/unpack/hackrequire/index.js"></script><script src=../js/core#' "$package_dir/html/whatsnew.html"
|
||||
find_result=$( grep -lr "whatsnew.html" "$tmp_dir/core.wxvpkg" )
|
||||
grep -lr "t=>{R(\"new_version_hint" "$find_result"
|
||||
sed -i 's#t=>{R("new_version_hint#t=>{const keys = ["shareData", "windowMap", "isSimple","masterProxyPort", "proxyPort", "masterH2ProxyPort", "h2ProxyPort"];for(let k of keys)t.window.global[k] = global[k];R("new_version_hint#' $find_result
|
||||
|
||||
# pack 路径 到 文件
|
||||
notice "pack"
|
||||
node "$pack_script" "$tmp_dir/core.wxvpkg" "$package_dir/core.wxvpkg"
|
||||
|
@ -23,110 +23,7 @@ if [ `grep -c "patch wechat devtools begin" $target_file` -ne '0' ];then
|
||||
fi
|
||||
|
||||
tmp_file=$(mktemp)
|
||||
cat > "$tmp_file" <<EOF
|
||||
/* patch wechat devtools begin */
|
||||
/* nw-menu.js */
|
||||
(() => {
|
||||
try {
|
||||
if (typeof nw === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
let log = function (content) {
|
||||
process.stderr.write(content + "\n");
|
||||
};
|
||||
|
||||
let originMenuItem = nw.MenuItem;
|
||||
nw.MenuItem = function MenuItem(options) {
|
||||
|
||||
options = Object.assign({}, options);
|
||||
|
||||
delete options.shortcutName;
|
||||
delete options.shouldEnabled;
|
||||
|
||||
if (options.label && (typeof options.label === "string")) {
|
||||
|
||||
if (options.label.indexOf("[") !== -1) {
|
||||
let rest = options.label.split("[").slice(1).join("[").trim();
|
||||
if (rest[rest.length - 1] === "]") {
|
||||
rest = rest.slice(0, -1).split("+").map((x) => {
|
||||
if (!x) { return "+" }
|
||||
switch (x) {
|
||||
case "↓": { return "Down"; }
|
||||
case "↑": { return "Up"; }
|
||||
case "PAGE↓": { return "PageDown"; }
|
||||
case "PAGE↑": { return "PageUp"; }
|
||||
case "←": { return "Left"; }
|
||||
case "→": { return "Right"; }
|
||||
default: { return x; }
|
||||
}
|
||||
});
|
||||
if (rest.length > 1) {
|
||||
options.key = rest[rest.length - 1];
|
||||
options.modifiers = rest.slice(0, -1).join("+");
|
||||
} else {
|
||||
options.key = rest[0];
|
||||
}
|
||||
}
|
||||
options.label = options.label.split("[")[0];
|
||||
}
|
||||
|
||||
if (options.label.indexOf("(&") !== -1) {
|
||||
options.label = options.label.split("(&")[0];
|
||||
}
|
||||
options.label = options.label.replace("&", "").trim();
|
||||
|
||||
switch (options.label) {
|
||||
case "Go to Declaration": { options.label = "转到声明"; break; }
|
||||
case "Go to References": { options.label = "转到引用"; break; }
|
||||
case "Find All References": { options.label = "查找所有引用"; break; }
|
||||
case "Find All Implementations": { options.label = "查找所有实现"; break; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new originMenuItem(options);
|
||||
|
||||
};
|
||||
|
||||
let originAppend = nw.Menu.prototype.append;
|
||||
nw.Menu.prototype.append = function (item) {
|
||||
|
||||
if (item.parentMenu) {
|
||||
item.parentMenu.remove(item);
|
||||
}
|
||||
item.parentMenu = this;
|
||||
|
||||
if ((this.items.length > 0) &&
|
||||
(this.items[this.items.length - 1].type === "separator") &&
|
||||
(item.type === "separator")) {
|
||||
originInsert.call(this, item, this.items.length);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((this.items.length === 0) && (item.type === "separator")) {
|
||||
originInsert.call(this, item, this.items.length);
|
||||
return;
|
||||
}
|
||||
|
||||
return originAppend.call(this, item);
|
||||
};
|
||||
|
||||
let originInsert = nw.Menu.prototype.insert;
|
||||
nw.Menu.prototype.insert = function (item, index) {
|
||||
if (item.parentMenu) {
|
||||
item.parentMenu.remove(item);
|
||||
}
|
||||
item.parentMenu = this;
|
||||
return originInsert.call(this, item, index);
|
||||
};
|
||||
} catch (error) {
|
||||
process.stderr.write(error.message);
|
||||
process.stderr.write(error.stack);
|
||||
}
|
||||
})();
|
||||
/* patch wechat devtools end */
|
||||
EOF
|
||||
cat "$root_dir/res/scripts/hackrequire.js" > "$tmp_file"
|
||||
cat "$target_file" >> "$tmp_file"
|
||||
|
||||
cat "$tmp_file" > "$target_file"
|
||||
|
@ -1,8 +1,9 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
set -ex
|
||||
root_dir=$(cd `dirname $0`/.. && pwd -P)
|
||||
srcdir=$root_dir
|
||||
tmp_dir="$root_dir/tmp"
|
||||
nwjs_dir="$root_dir/nwjs"
|
||||
package_dir="$root_dir/package.nw"
|
||||
|
||||
# 修复: webview manager
|
||||
@ -28,22 +29,56 @@ if [ ! -f "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc" ];then
|
||||
chmod 0755 "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc"
|
||||
fi
|
||||
|
||||
if [ ! -f "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcc_module.node" ];then
|
||||
wget -c "https://github.com/msojocs/wx-compiler/releases/download/${WX_COMPILER_VERSION}/wcc_module.node" -O "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcc_module.node.tmp"
|
||||
mv "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcc_module.node.tmp" "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcc_module.node"
|
||||
chmod 0755 "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcc_module.node"
|
||||
fi
|
||||
|
||||
if [ ! -f "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc_module.node" ];then
|
||||
wget -c "https://github.com/msojocs/wx-compiler/releases/download/${WX_COMPILER_VERSION}/wcsc_module.node" -O "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc_module.node.tmp"
|
||||
mv "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc_module.node.tmp" "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc_module.node"
|
||||
chmod 0755 "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}/wcsc_module.node"
|
||||
fi
|
||||
|
||||
# \cp -rf "${srcdir}/compiler/generatemd5.js" "${package_dir}/js/vendor/generatemd5.js"
|
||||
\cp "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}"/* "${package_dir}/node_modules/wcc-exec"
|
||||
\cp "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}"/{wcc,wcsc} "${package_dir}/node_modules/wcc-exec"
|
||||
cd "${package_dir}/node_modules/wcc-exec" && chmod 0755 wcc wcsc && rm -rf wcc.exe wcsc.exe
|
||||
# node "${package_dir}/js/vendor/generatemd5.js"
|
||||
|
||||
# 修复:可视化用的wcc,wcsc
|
||||
echo "fix: wcc,wcsc"
|
||||
# wcc wcsc
|
||||
ls -l "${srcdir}/compiler"
|
||||
cd "${srcdir}/compiler" && npm install
|
||||
# 可视化编译
|
||||
(cd "${package_dir}/node_modules/" \
|
||||
&& rm -rf wcc \
|
||||
&& cp -rL "${srcdir}/compiler/wcc_node" "wcc" \
|
||||
&& chmod +x wcc/bin/linux/*
|
||||
)
|
||||
\cp "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}"/wcc_module.node "${package_dir}/node_modules/wcc/build/Release"
|
||||
cd "${package_dir}/node_modules/wcc/build/Release" && rm -rf wcc.node && mv wcc_module.node wcc.node
|
||||
\cp "${srcdir}/cache/compiler/${WX_COMPILER_VERSION}"/wcsc_module.node "${package_dir}/node_modules/wcc/build/Release"
|
||||
cd "${package_dir}/node_modules/wcc/build/Release" && rm -rf wcsc.node && mv wcsc_module.node wcsc.node
|
||||
|
||||
# 修复mock按钮无反应
|
||||
sed -i '1s/^/window.prompt = parent.prompt;\n/' "${package_dir}/js/ideplugin/devtools/index.js"
|
||||
|
||||
# 修复视频无法播放
|
||||
if [ ! -f "${srcdir}/cache/libffmpeg-0.55.00-linux-x64.zip" ];then
|
||||
wget -c https://github.com/nwjs-ffmpeg-prebuilt/nwjs-ffmpeg-prebuilt/releases/download/0.55.0/0.55.0-linux-x64.zip -O "${srcdir}/cache/libffmpeg-0.55.00-linux-x64.zip.tmp"
|
||||
mv "${srcdir}/cache/libffmpeg-0.55.00-linux-x64.zip.tmp" "${srcdir}/cache/libffmpeg-0.55.00-linux-x64.zip"
|
||||
fi
|
||||
rm -rf "${nwjs_dir}/lib/libffmpeg.so"
|
||||
unzip "${srcdir}/cache/libffmpeg-0.55.00-linux-x64.zip" -d "${nwjs_dir}/lib"
|
||||
|
||||
# Skyline解析插件修复
|
||||
float_pigment_version="continuous"
|
||||
if [ ! -f "${srcdir}/cache/float-pigment-${float_pigment_version}.node" ];then
|
||||
wget -c "https://github.com/msojocs/float-pigment-rust/releases/download/${float_pigment_version}/float-pigment.linux-x64-gnu.node" -O "${srcdir}/cache/float-pigment-${float_pigment_version}.node.tmp"
|
||||
mv "${srcdir}/cache/float-pigment-${float_pigment_version}.node.tmp" "${srcdir}/cache/float-pigment-${float_pigment_version}.node"
|
||||
fi
|
||||
rm "${package_dir}/node_modules/node-float-pigment-css/float-pigment-css-for-nodejs.node" "${package_dir}/node_modules/node-float-pigment-css/float-pigment-css-for-nwjs.node"
|
||||
cp "${srcdir}/cache/float-pigment-${float_pigment_version}.node" "${package_dir}/node_modules/node-float-pigment-css/float-pigment-css-for-nodejs.node"
|
||||
cp "${srcdir}/cache/float-pigment-${float_pigment_version}.node" "${package_dir}/node_modules/node-float-pigment-css/float-pigment-css-for-nwjs.node"
|
||||
|
||||
# 阻止无限启动服务器
|
||||
mv "${package_dir}/js/core/entrance.js" "${package_dir}/js/core/entrance.js.bak"
|
||||
cat "${srcdir}/res/scripts/entrance.js" > "${package_dir}/js/core/entrance.js"
|
||||
cat "${package_dir}/js/core/entrance.js.bak" >> "${package_dir}/js/core/entrance.js"
|
||||
rm "${package_dir}/js/core/entrance.js.bak"
|
||||
|
||||
current=`date "+%Y-%m-%d %H:%M:%S"`
|
||||
timeStamp=`date -d "$current" +%s`
|
||||
|
@ -13,6 +13,8 @@ const parseFile = function (path) {
|
||||
content.name = "wechat-devtools";
|
||||
// 开启调试,更新参数
|
||||
content['chromium-args'] = content['chromium-args'].replace('--disable-devtools', '--mixed-context').replace('--ignore-gpu-blacklist', '--ignore-gpu-blocklist')
|
||||
// fix worker #145
|
||||
.replace('--js-flags=--harmony-weak-refs', '--enable-features=SharedArrayBuffer')
|
||||
content.window.height = content.window.width = 1000
|
||||
fs.writeFileSync(path, JSON.stringify(content));
|
||||
|
||||
|
7
tools/push-docker.sh
Normal file → Executable file
7
tools/push-docker.sh
Normal file → Executable file
@ -1,6 +1,9 @@
|
||||
#!/bin/bash
|
||||
root_dir=$(cd `dirname $0`/.. && pwd -P)
|
||||
set -ex
|
||||
|
||||
cd $root_dir/docker
|
||||
docker build . --name jiyecafe/wechat-devtools-build:latest
|
||||
# docker tag wechat-web-devtools-linux_wechat_devtools jiyecafe/wechat-devtools-build:latest
|
||||
docker build . -t jiyecafe/wechat-devtools-build:v1.0.4
|
||||
docker tag jiyecafe/wechat-devtools-build:v1.0.4 jiyecafe/wechat-devtools-build:latest
|
||||
docker push jiyecafe/wechat-devtools-build:v1.0.4
|
||||
docker push jiyecafe/wechat-devtools-build:latest
|
@ -2,7 +2,7 @@
|
||||
# 参数:
|
||||
# 1 ---- NW版本
|
||||
|
||||
set -e
|
||||
set -ex
|
||||
|
||||
notice() {
|
||||
echo -e "\033[36m $1 \033[0m "
|
||||
|
@ -72,7 +72,6 @@ if [ $CURRENT_STEP == $INSTALL_NODE_SUCCESS ];then
|
||||
npm config set phantomjs_cdnurl http://npmmirror.com/mirrors/phantomjs # phantomjs 二进制包镜像
|
||||
npm config set selenium_cdnurl http://npmmirror.com/mirrors/selenium # selenium 二进制包镜像
|
||||
npm config set node_inspector_cdnurl http://npmmirror.com/mirrors/node-inspector # node-inspector 二进制包镜像
|
||||
# npm cache clean --force # 清空缓存
|
||||
fi
|
||||
step_switch $INSTALL_NPM_CONFIG_SUCCESS
|
||||
fi
|
||||
@ -80,7 +79,7 @@ fi
|
||||
if [ $CURRENT_STEP == $INSTALL_NPM_CONFIG_SUCCESS ];then
|
||||
notice "=====安装node-gyp nw-gyp===="
|
||||
npm uninstall node-gyp -g
|
||||
npm install node-gyp nw-gyp -g
|
||||
npm install node-gyp nw-gyp@3.6.6 -g
|
||||
echo $PATH
|
||||
node-gyp install
|
||||
node-gyp list
|
||||
@ -122,7 +121,7 @@ if [ $CURRENT_STEP == $INSTALL_NW_SUCCESS ];then
|
||||
echo "TARGET_VERSION: $TARGET_VERSION"
|
||||
if [ ! -f "$root_dir/package.nw/package.json" ];then
|
||||
# 没装,直接装
|
||||
node "$root_dir/tools/update-wechat-devtools-node" $TARGET_VERSION $@
|
||||
node "$root_dir/tools/update-wechat-devtools.js" $TARGET_VERSION $@
|
||||
|
||||
step_switch $INSTALL_WECHAT_SUCCESS
|
||||
else
|
||||
@ -131,7 +130,7 @@ if [ $CURRENT_STEP == $INSTALL_NW_SUCCESS ];then
|
||||
DEVTOOLS_VERSION="${DEVTOOLS_VERSION//\"/}"
|
||||
# 已安装, 比较目标版本
|
||||
if [ "$TARGET_VERSION" != "$DEVTOOLS_VERSION" ];then
|
||||
node "$root_dir/tools/update-wechat-devtools-node" $TARGET_VERSION $@
|
||||
node "$root_dir/tools/update-wechat-devtools.js" $TARGET_VERSION $@
|
||||
fi
|
||||
step_switch $INSTALL_WECHAT_SUCCESS
|
||||
fi
|
@ -1 +0,0 @@
|
||||
#!/bin/bash
|
@ -3,7 +3,6 @@
|
||||
// https://gist.github.com/chemzqm/9f2334ca201dc2fbc363fdd757aa2ed4
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const { execSync } = require('child_process')
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const from = args[0]
|
||||
@ -12,7 +11,10 @@ const to = args[1]
|
||||
let file = to
|
||||
console.log(file)
|
||||
if (fs.existsSync(file)) {
|
||||
execSync(`rm -rf ${file}`)
|
||||
try{
|
||||
fs.rmSync(file)
|
||||
}
|
||||
catch{}
|
||||
}
|
||||
|
||||
let fd = fs.openSync(file, 'w')
|
||||
@ -28,7 +30,10 @@ function writeInt32(number, start) {
|
||||
writeSync(buf, start)
|
||||
}
|
||||
|
||||
let files = fs.readdirSync(dest)
|
||||
// 加入子文件夹的文件
|
||||
const files = fs.readdirSync(dest, { recursive: true }).filter(e => fs.statSync(path.join(dest, e)).isFile())
|
||||
// console.log(JSON.stringify(files, null, 4))
|
||||
|
||||
// 文件数
|
||||
let totalCount = files.length
|
||||
|
||||
@ -57,6 +62,7 @@ for (let file of files) {
|
||||
writeInt32(dataOffset, start)
|
||||
start += 4
|
||||
// write length
|
||||
// console.info('dest:', dest, 'file:', file)
|
||||
let contentBuf = fs.readFileSync(path.join(dest, file))
|
||||
writeInt32(contentBuf.length, start)
|
||||
start += 4
|
||||
|
Loading…
x
Reference in New Issue
Block a user