Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fs = require("fs")
- const path = require("path")
- const jsfiles = [...new Set(process.argv.slice(2))]
- if(jsfiles.length === 0){
- throw new Error("no files")
- } else {
- console.log(jsfiles)
- }
- const modules = []
- for(const file of jsfiles){
- const abspath = path.resolve(file)
- const content = fs.readFileSync(abspath).toString()
- const key = new URL(abspath, "file:///")
- modules.push(`"${key}": ({require, module, exports}) => {${content}},`)
- }
- const entrypoint = new URL(path.resolve(jsfiles[0]), "file:///")
- const output = `
- const sources = {
- ${modules.join("\n")}
- }
- const cache = {}
- const sym = Symbol()
- const createRequire = file => reqpath => {
- const key = new URL(reqpath, file)
- if(key in cache){
- if(cache[key] === sym) throw new Error("Cyclic require is detected.")
- return cache[key]
- }
- cache[key] = sym
- const exports = {}
- const module = {exports}
- sources[key]({
- require: createRequire(key),
- module,
- exports,
- })
- cache[key] = module.exports
- return module.exports
- }
- const entrypoint = "${entrypoint}"
- createRequire("file:///")(entrypoint)
- `
- fs.writeFileSync("./output.js", output)
Add Comment
Please, Sign In to add comment