const fs = require('fs')
const { nodeFileTrace } = require('@vercel/nft')
/**
* Exports a function to write a json that computes dependencies required by given paths
* @param paths List of paths for which dependencies need to be computed
* @param filename Name of the file to write json to
* @returns void
*/
async function computeDependencies(paths: string[] = [], name: string = 'deps') {
// the whole app inside index.js,
// include other paths that are
// not bundled with your app builds
const files = paths
// Compute file trace
const { fileList } = await nodeFileTrace(files)
// Store set of packages
let packages = {}
fileList.forEach((i) => {
if (i.includes('node_modules/')) {
let temp = i.replace('node_modules/', '')
temp = temp.substring(0, temp.indexOf('/'))
packages[`node_modules/${temp}`] = true
} else {
packages[i] = true
}
})
// Sort the set of packages by name (for easier difference comparison with git)
packages = Object.keys(packages)
.sort()
.reduce((obj, key) => {
obj[key] = packages[key]
return obj
}, {})
// Dump the list of the computed packages for further references while deploying the app
fs.writeFileSync(`./${name}.json`, JSON.stringify(packages, null, 2), 'utf-8')
}
Tuesday, February 22 2022
Compute runtime dependencies for your Remix Express app via @vercel/nft

Rishi Raj Jain @rishi_raj_jain_