Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

npm global packages: Reference content files from package

I'm in the process of building an npm package which will be installed globally. Is it possible to have non-code files installed alongside code files that can be referenced from code files?

For example, if my package includes someTextFile.txt and a module.js file (and my package.json includes "bin": {"someCommand":"./module.js"}) can I read the contents of someTextFile.txt into memory in module.js? How would I do that?

like image 842
Jacob Horbulyk Avatar asked Apr 25 '18 15:04

Jacob Horbulyk


People also ask

How do I use Global NPM packages?

To install a module from npm globally, you'll simply need to use the --global flag when running the install command to have the module install globally, rather than locally (to the current directory). Note: One caveat with global modules is that, by default, npm will install them to a system directory, not a local one.

How npm install all dependencies from package json?

NPM installs devDependencies within the package. json file. The 'npm install' command should add all the dependencies and devDependencies automatically during installation. If you need to add specific devDependencies to your project, you can use this command- 'npm install --save-dev'.

How do I view the content of a NPM package?

The npm view command can be used to directly view registry information about a package without the need to download or install the package. We're using the lodash package as an example. $ npm view lodash { name: 'lodash', description: 'Lodash modular utilities.

Where are global npm modules stored?

Global modules are installed in the /usr/local/lib/node_modules project directory in the standard system, which is the system's root. Print the location of all global modules on your system using this command.


1 Answers

The following is an example of a module that loads the contents of a file (string) into the global scope.

core.js : the main module file (entry point of package.json)

//:Understanding: module.exports
module.exports = {
 reload:(cb)=>{ console.log("[>] Magick reloading to memory"); ReadSpellBook(cb)}
}
//:Understanding: global object
//the following function is only accesible by the magick module
const ReadSpellBook=(cb)=>{
 require('fs').readFile(__dirname+"/spellBook.txt","utf8",(e,theSpells)=>{
  if(e){ console.log("[!] The Spell Book is MISSING!\n"); cb(e)}
  else{ 
    console.log("[*] Reading Spell Book") 
    //since we want to make the contents of .txt accesible :
    global.SpellBook = theSpells // global.SpellBook is now shared accross all the code (global scope)
    cb()//callBack
  }
 })
}
//·: Initialize :.
console.log("[+] Time for some Magick!")
ReadSpellBook((e)=>e?console.log(e):console.log(SpellBook))

spellBook.txt

ᚠ   ᚡ   ᚢ   ᚣ   ᚤ   ᚥ   ᚦ   ᚧ   ᚨ   ᚩ   ᚪ   ᚫ   ᚬ   ᚭ   ᚮ   ᚯ
ᚰ   ᚱ   ᚲ   ᚳ   ᚴ   ᚵ   ᚶ   ᚷ   ᚸ   ᚹ   ᚺ   ᚻ   ᚼ   ᚽ   ᚾ   ᚿ
ᛀ   ᛁ   ᛂ   ᛃ   ᛄ   ᛅ   ᛆ   ᛇ   ᛈ   ᛉ   ᛊ   ᛋ   ᛌ   ᛍ   ᛎ   ᛏ
ᛐ   ᛑ   ᛒ   ᛓ   ᛔ   ᛕ   ᛖ   ᛗ   ᛘ   ᛙ   ᛚ   ᛛ   ᛜ   ᛝ   ᛞ   ᛟ
ᛠ   ᛡ   ᛢ   ᛣ   ᛤ   ᛥ   ᛦ   ᛧ   ᛨ   ᛩ   ᛪ   ᛫   ᛬   ᛭   ᛮ   ᛯ

If you require it from another piece of code, you will see how it prints to the console and initializes by itself.

If you want to achieve a manual initalization, simply remove the 3 last lines (·: Initialize :.) and use reload() :

const magick = require("core.js")
magick.reload((error)=>{ if(error){throw error}else{ 
  //now you know the SpellBook is loaded
  console.log(SpellBook.length)
})
like image 153
EMX Avatar answered Oct 16 '22 22:10

EMX