diff --git a/examples/build-package/README.md b/examples/build-package/README.md
index 671fa45c..e77c0c59 100644
--- a/examples/build-package/README.md
+++ b/examples/build-package/README.md
@@ -37,6 +37,7 @@ Note that this example may create resources which cost money. Run `terraform des
| [lambda\_layer](#module\_lambda\_layer) | ../../ | n/a |
| [lambda\_layer\_pip\_requirements](#module\_lambda\_layer\_pip\_requirements) | ../.. | n/a |
| [lambda\_layer\_poetry](#module\_lambda\_layer\_poetry) | ../../ | n/a |
+| [npm\_package\_with\_commands\_and\_patterns](#module\_npm\_package\_with\_commands\_and\_patterns) | ../../ | n/a |
| [package\_dir](#module\_package\_dir) | ../../ | n/a |
| [package\_dir\_pip\_dir](#module\_package\_dir\_pip\_dir) | ../../ | n/a |
| [package\_dir\_poetry](#module\_package\_dir\_poetry) | ../../ | n/a |
diff --git a/examples/build-package/main.tf b/examples/build-package/main.tf
index 4c4ecb71..7119a5d5 100644
--- a/examples/build-package/main.tf
+++ b/examples/build-package/main.tf
@@ -244,6 +244,31 @@ module "package_with_commands_and_patterns" {
]
}
+# Some use cases might require the production packages are deployed while maintaining local node_modules folder
+# This example saves the node_modules folder by moving it to an ignored directory
+# After the zip file is created with production node_modules, the dev node_modules folder is restored
+module "npm_package_with_commands_and_patterns" {
+ source = "../../"
+
+ create_function = false
+
+ runtime = "nodejs18.x"
+ source_path = [
+ {
+ path = "${path.module}/../fixtures/node-app"
+ commands = [
+ "[ ! -d node_modules ] || mv node_modules node_modules_temp",
+ "npm install --production",
+ ":zip",
+ "rm -rf node_modules",
+ "[ ! -d node_modules_temp ] || mv node_modules_temp node_modules",
+ ]
+ patterns = [
+ "!node_modules_temp/.*"
+ ]
+ }
+ ]
+}
# Create zip-archive with various sources and patterns.
# Note, that it is possible to write comments in patterns.
module "package_with_patterns" {
diff --git a/package.py b/package.py
index ded4056e..620be347 100644
--- a/package.py
+++ b/package.py
@@ -779,6 +779,9 @@ def commands_step(path, commands):
)
else:
batch.append(c)
+ if batch:
+ step("sh", path, "\n".join(batch))
+ batch.clear()
for claim in claims:
if isinstance(claim, str):
diff --git a/tests/fixtures/node-app/index.js b/tests/fixtures/node-app/index.js
new file mode 100644
index 00000000..09d4352e
--- /dev/null
+++ b/tests/fixtures/node-app/index.js
@@ -0,0 +1 @@
+// test
diff --git a/tests/fixtures/node-app/package.json b/tests/fixtures/node-app/package.json
new file mode 100644
index 00000000..1bd4d69d
--- /dev/null
+++ b/tests/fixtures/node-app/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "app",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ },
+ "devDependencies": {
+ "axios": "^1.7.3"
+ }
+}