Skip to main content

Tips

Building For Production​

The default configuration of having useNodeExecutor enabled assumes that your entryPoint file is a .js file that can be run with Node.js.

In the case of a pure JavaScript app with no node_module dependencies, this might work fine out of the box. However, in most cases, you'll need to build and bundle TypeScript code and/or include dependencies that live in node_modules.

Let's look at how to handle these common scenarios.

Bundling​

When using TypeScript, you'll need to compile and bundle your code before creating the .deb package. We recommend using tsup due to its simplicity and powerful features. For a complete example of an app using tsup, see the examples/kitchen-sink directory in the GitHub repository.

Managing Dependencies​

Understanding how to handle dependencies is crucial for creating efficient .deb packages:

  • devDependencies: These are packages needed to build your application but not required at runtime. This includes:

    • Build tools (TypeScript, tsup, webpack, etc.)
    • Testing frameworks
    • Development utilities
  • dependencies: These are packages actually required at runtime on the end user's device. In most cases, this is only really needed for dependencies that:

    • Don't work well cross-platform when compiled (like native modules)
    • Need dynamic loading capabilities
    • Require access to their own assets or resources at runtime

A good bundler like tsup should be able to bundle dev dependencies just fine and tree-shake where possible. Ensure you add "node_modules/**/*" to your files.include array ensure the dependencies are copied over.

After building your app, you should remove development dependencies to keep the package size minimal. You have two options:

This approach automatically runs npm prune --omit=dev before packaging and npm ci after packaging, keeping your development environment intact. See Build Optimization for more details.

Option 2: Manual dependency management​

Manually remove development dependencies:

npm prune --omit=dev

Note: If you installed snodeb as a devDependency, this command will remove it. However, you can still create the .deb package using npx:

npx snodeb

CI/CD Integration​

Here's an example GitLab CI configuration that automates the build and packaging process:

Using snodeb's built-in prune feature:

snodeb:
script:
- npm ci # Install all dependencies
- npm run bundle # Build your application
- npx snodeb # Create the .deb package (with prune: true in config)
artifacts:
paths:
- ./deb/*.deb # Store the resulting .deb file as an artifact

Using manual dependency management:

snodeb:
script:
- npm ci # Install all dependencies
- npm run bundle # Build your application
- npm prune --omit=dev # Remove development dependencies
- npx snodeb # Create the .deb package
artifacts:
paths:
- ./deb/*.deb # Store the resulting .deb file as an artifact