128 lines
4.4 KiB
YAML
128 lines
4.4 KiB
YAML
|
---
|
||
|
version: '3'
|
||
|
|
||
|
tasks:
|
||
|
create:
|
||
|
deps:
|
||
|
- :install:software:jq
|
||
|
log:
|
||
|
error: Error creating production `node_modules/` pack
|
||
|
start: Creating production `node_modules/` pack
|
||
|
success: Successfully created production `node_modules/` pack
|
||
|
cmds:
|
||
|
- |
|
||
|
if [ -d node_modules ]; then
|
||
|
mv node_modules node_modules.bak
|
||
|
fi
|
||
|
- task: install
|
||
|
- task: minify
|
||
|
- task: pack
|
||
|
- rm package-lock.json
|
||
|
- |
|
||
|
if [ -d node_modules.bak ]; then
|
||
|
rm -rf node_modules
|
||
|
mv node_modules.bak node_modules
|
||
|
fi
|
||
|
status:
|
||
|
- '[ $(jq -r ".dependencies | length" package.json) == "0" ]'
|
||
|
|
||
|
install:
|
||
|
deps:
|
||
|
- :install:software:node
|
||
|
log:
|
||
|
error: Encountered error while running `npm install --only=prod`
|
||
|
start: Installing production `node_modules/`
|
||
|
success: Successfully set-up production `node_modules/` folder
|
||
|
cmds:
|
||
|
- SKIP_NPM_START=true npm install --only=prod
|
||
|
|
||
|
minify:
|
||
|
deps:
|
||
|
- :install:go:node-prune
|
||
|
- :install:npm:modclean
|
||
|
summary: |
|
||
|
## node-prune
|
||
|
|
||
|
`node-prune` is a Go project that does a good job at cleaning up projects while
|
||
|
remaining safe.
|
||
|
|
||
|
## modclean
|
||
|
|
||
|
`modclean` does what `node-prune` does and takes it a step further.
|
||
|
|
||
|
`modclean` provides 3 different patterns by default. They are:
|
||
|
|
||
|
* `default:safe` - Contains patterns that are considered safe and should not
|
||
|
affect your application. It also removes the most files/folders of all the configurations.
|
||
|
* `default:caution` - Contains patterns that could potentially cause issues with
|
||
|
modules, but includes patterns that will help reduce your modules folder size.
|
||
|
* `default:danger` - Contains patterns that are known to cause issues with certain
|
||
|
modules, but can help reduce files and your modules folder size even further.
|
||
|
|
||
|
**To clean with `default:safe` and `default:caution`, you can run:**
|
||
|
`task npm:bundle:minify -- default:safe,default:caution
|
||
|
|
||
|
**To clean with all of them:**
|
||
|
`task npm:bundle:minify -- default:*`
|
||
|
|
||
|
If CLI arguments are not passed, then the task looks at `.blueprint.modcleanPatterns` in `package.json`
|
||
|
for the patterns. And if that is not present, then `default:safe,default:caution` is used by default.
|
||
|
|
||
|
You can see the [default patterns here](https://github.com/ModClean/modclean-patterns-default/blob/master/patterns.json).
|
||
|
vars:
|
||
|
MODCLEAN_PATTERNS:
|
||
|
sh: |
|
||
|
{{if .CLI_ARGS}}echo '{{.CLI_ARGS}}'{{else}}PREFERENCE="$(jq -r '.blueprint.modcleanPatterns' package.json)"
|
||
|
if [ "$PREFERENCE" != 'null' ]; then
|
||
|
echo "$PREFERENCE"
|
||
|
else
|
||
|
echo "default:safe,default:caution"
|
||
|
fi{{end}}
|
||
|
log:
|
||
|
error: Encountered error while pruning production `node_modules/` folder
|
||
|
start: Pruning production `node_modules/` folder
|
||
|
success: Successfully pruned production `node_modules/` folder
|
||
|
cmds:
|
||
|
- node-prune
|
||
|
- modclean --patterns="{{.MODCLEAN_PATTERNS}}" --run
|
||
|
|
||
|
pack:
|
||
|
deps:
|
||
|
- :install:npm:pac
|
||
|
log:
|
||
|
error: Error compressing production `node_modules/` into `.tgz` files stored in the `.modules/` folder
|
||
|
start: Packing production `node_modules/` into `.tgz` files stored in the `.modules/` folder
|
||
|
success: Finished packing production `node_modules/` into the `.modules/` folder
|
||
|
cmds:
|
||
|
- mkdir -p .modules
|
||
|
- .config/log info '`pac` is being replaced by `produndle` - WIP' || produndle pack
|
||
|
|
||
|
unpack:
|
||
|
deps:
|
||
|
- :install:software:jq
|
||
|
cmds:
|
||
|
- task: unpack:pac
|
||
|
status:
|
||
|
- '[ ! -d .modules ] || ([ -d .modules ] && (! ls .modules | grep .tgz))'
|
||
|
|
||
|
unpack:pac:
|
||
|
deps:
|
||
|
- :install:npm:pac
|
||
|
log:
|
||
|
error: Error running `unpack:pac`
|
||
|
start: Populating `node_modules/` with `.tgz` files in the `.modules` folder
|
||
|
success: Finished populating `node_modules/` folder
|
||
|
cmds:
|
||
|
- .config/log info '`pac` is being replaced by `produndle` - WIP' || produndle unpack
|
||
|
- |
|
||
|
BASE_DIR="$(PWD)"
|
||
|
for MODULE in node_modules/*; do
|
||
|
cd "$MODULE"
|
||
|
if [ -f Taskfile.yml ]; then
|
||
|
task unpack || EXIT_CODE=$?
|
||
|
if [ -n "$EXIT_CODE" ]; then
|
||
|
"${PWD}/.config/log" warn 'There was an error running `task unpack` in '"$MODULE"
|
||
|
fi
|
||
|
fi
|
||
|
done
|