How to add any* Library to a backend script
How to add any* Library to a backend script
Last Modified Date:
Oct 1, 2025
Oct 1, 2025
Introduction
Sometimes we need to build backend Script functionalities that require external libraries to simplify complex tasks.
For example: NetSuite does not provide a native way to read Excel .XLSX files (the most common modern format). To handle these files, we need a library such as XLSX.js that can interpret Excel content.

What are the challenges?
Before the standardization of ES Modules in ECMAScript 6, there was no single, unified way to modularize and distribute libraries. Instead, different (and often incompatible) systems were used.
NetSuite backend scripts in SuiteScript 2.x rely on AMD. However, not all libraries are distributed in this format. In fact, CommonJS and ESM are far more common today, which makes direct integration with SuiteScript more difficult.
Limitations*
Not every library can be used in NetSuite. The issue is not the distribution format itself but rather the runtime that NetSuite uses: GraalVM JavaScript.
This runtime does not support:
Browser-specific objects (window, document, etc.)
Native Node.js modules
The fetch API
If a library depends on these features, it cannot be used in a backend Script.
How to Import a Non-AMD Library
To demonstrate, we’ll use Zod, a schema validation library. We’ll bundle it into AMD format so it can be used in a Suitelet.
The same process applies to other backend scripts and almost any library* (see Limitations above).
Step 1. Prepare Your Environment
Make sure you are inside a Node.js project (you should see a package.json file in your directory).
Install the library you want. For Zod:
Install Rollup, the bundler we’ll use:
If your library is distributed in CommonJS, you’ll also need Rollup’s CommonJS plugin:
Step 2. Create the Rollup Config File
Create a file named rollup.config.mjs in your project folder. Add the following configuration:
import commonjs from '@rollup/plugin-commonjs';
export default {
input: './node_modules/zod/lib/index.js',
output: {
file: 'zod.js',
format: 'amd',
},
plugins: [
commonjs()
]
input → Path to the library’s entry file (usually inside node_modules). For Zod, it’s ./node_modules/zod/lib/index.js.
output.file → Name of the bundled file to generate. In this case: zod.js.
format → Must be amd to work in NetSuite.
Step 3. Run the Build
With the config file ready, run Rollup:
This will produce the output file (zod.js in our example).
Step 4. Upload to NetSuite
Upload the generated zod.js file into the File Cabinet of your NetSuite account. From there, you can reference and import it in your backend Scripts just like any other module.
Conclusion
Although NetSuite doesn’t natively support every library format, using a bundler like Rollup allows you to convert CommonJS or ESM libraries into AMD modules compatible with SuiteScript 2.x.
By doing so, you unlock access to powerful tools like Zod, XLSX.js, and many others, enabling you to write cleaner, more efficient, and more capable backend scripts.
Need help implementing external libraries or optimizing your SuiteScript projects? At BrokenRubik, we specialize in SuiteCommerce and NetSuite customizations that scale. Contact us to see how we can support your team.
Introduction
Sometimes we need to build backend Script functionalities that require external libraries to simplify complex tasks.
For example: NetSuite does not provide a native way to read Excel .XLSX files (the most common modern format). To handle these files, we need a library such as XLSX.js that can interpret Excel content.

What are the challenges?
Before the standardization of ES Modules in ECMAScript 6, there was no single, unified way to modularize and distribute libraries. Instead, different (and often incompatible) systems were used.
NetSuite backend scripts in SuiteScript 2.x rely on AMD. However, not all libraries are distributed in this format. In fact, CommonJS and ESM are far more common today, which makes direct integration with SuiteScript more difficult.
Limitations*
Not every library can be used in NetSuite. The issue is not the distribution format itself but rather the runtime that NetSuite uses: GraalVM JavaScript.
This runtime does not support:
Browser-specific objects (window, document, etc.)
Native Node.js modules
The fetch API
If a library depends on these features, it cannot be used in a backend Script.
How to Import a Non-AMD Library
To demonstrate, we’ll use Zod, a schema validation library. We’ll bundle it into AMD format so it can be used in a Suitelet.
The same process applies to other backend scripts and almost any library* (see Limitations above).
Step 1. Prepare Your Environment
Make sure you are inside a Node.js project (you should see a package.json file in your directory).
Install the library you want. For Zod:
Install Rollup, the bundler we’ll use:
If your library is distributed in CommonJS, you’ll also need Rollup’s CommonJS plugin:
Step 2. Create the Rollup Config File
Create a file named rollup.config.mjs in your project folder. Add the following configuration:
import commonjs from '@rollup/plugin-commonjs';
export default {
input: './node_modules/zod/lib/index.js',
output: {
file: 'zod.js',
format: 'amd',
},
plugins: [
commonjs()
]
input → Path to the library’s entry file (usually inside node_modules). For Zod, it’s ./node_modules/zod/lib/index.js.
output.file → Name of the bundled file to generate. In this case: zod.js.
format → Must be amd to work in NetSuite.
Step 3. Run the Build
With the config file ready, run Rollup:
This will produce the output file (zod.js in our example).
Step 4. Upload to NetSuite
Upload the generated zod.js file into the File Cabinet of your NetSuite account. From there, you can reference and import it in your backend Scripts just like any other module.
Conclusion
Although NetSuite doesn’t natively support every library format, using a bundler like Rollup allows you to convert CommonJS or ESM libraries into AMD modules compatible with SuiteScript 2.x.
By doing so, you unlock access to powerful tools like Zod, XLSX.js, and many others, enabling you to write cleaner, more efficient, and more capable backend scripts.
Need help implementing external libraries or optimizing your SuiteScript projects? At BrokenRubik, we specialize in SuiteCommerce and NetSuite customizations that scale. Contact us to see how we can support your team.
Common SuiteCommerce mistakes (and how to avoid them) - Part 2
Common SuiteCommerce mistakes (and how to avoid them) - Part 1
What are keywords and why do they matter for your SuiteCommerce store?
How to add any* Library to a backend script
SuiteCommerce Implementation: How to launch fast, scale smart, and win big with NetSuite eCommerce
Monitoring NetSuite: Best practices to prevent errors and boost performance
Saved Search Guide: How to make searches in NetSuite
NetSuite introduces AI Connector Service
CONTACT US

Let’s Talk!
Have a question, idea,
or project in mind?
Leave us a message below, we’d love to hear from you. Our team will get back to you shortly to explore how we can help.
CONTACT US

Let’s Talk!
Have a question, idea,
or project in mind?
Leave us a message below, we’d love to hear from you. Our team will get back to you shortly to explore how we can help.
CONTACT US

Let’s Talk!
Have a question, idea,
or project in mind?
Leave us a message below, we’d love to hear from you. Our team will get back to you shortly to explore how we can help.