Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript npm全局包:引用包中的内容文件_Javascript_Node.js_Npm_Scaffolding - Fatal编程技术网

Javascript npm全局包:引用包中的内容文件

Javascript npm全局包:引用包中的内容文件,javascript,node.js,npm,scaffolding,Javascript,Node.js,Npm,Scaffolding,我正在构建一个将在全球安装的npm包。是否可以将非代码文件与可从代码文件引用的代码文件一起安装 例如,如果我的包包含someTextFile.txt和module.js文件(我的package.json包含“bin”:{“someCommand”:“/module.js”}),我可以将someTextFile.txt的内容读入module.js中的内存吗?我该怎么做?下面是一个模块示例,该模块将文件(字符串)的内容加载到全局范围 core.js:主模块文件(package.json的入口点) s

我正在构建一个将在全球安装的npm包。是否可以将非代码文件与可从代码文件引用的代码文件一起安装


例如,如果我的包包含
someTextFile.txt
module.js
文件(我的
package.json
包含
“bin”:{“someCommand”:“/module.js”}
),我可以将
someTextFile.txt
的内容读入
module.js
中的内存吗?我该怎么做?

下面是一个模块示例,该模块将文件(字符串)的内容加载到全局范围

core.js:主模块文件(package.json的入口点)

spellBook.txt


如果您从另一段代码中需要它,您将看到它如何打印到控制台并自行初始化

如果要实现手动初始化,只需删除最后3行(
·:Initialize:。
)并使用
重新加载()


我已经建立了一些私下分发的CLI,所以我相信我可以在这里说明一下

  • 假设您的全局模块安装在名为$PATH的目录中。当您的软件包安装在任何机器上时,它基本上是在该目录下提取的

  • 当您从任何终端启动
    someCommand
    时,将调用保持在$PATH的
    module.js
    。如果最初将模板文件保存在与包相同的目录中,那么它将出现在
    module.js
    本地的位置

  • 假设您将模板编辑为字符串,然后希望将其本地写入用户希望的位置/
    pwd
    ,则只需使用
    process.cwd()
    获取该目录的路径即可。这完全取决于你如何编码

  • 如果您希望仅在npm包中显式包含文件,请使用package.json属性


  • 关于回答
    “我在npm包中的代码文件如何定位到全局安装的npm文件夹的路径,它位于该文件夹中,并且保证可以跨操作系统工作,并且是未来的证明?”
    ,这与您试图实现的模板非常不同。无论如何,你在这里只是问npm模块的全局路径。作为故障保护选项,在代码中使用
    require.main.filename
    返回的路径作为参考。

    当您
    npm publish
    时,它会打包文件夹中的所有内容,不包括
    .npmignore
    中注明的内容。(如果您没有
    .npmignore
    文件,它将深入
    .gitignore
    。请参见)因此,简而言之,您可以将文本文件打包到模块中。安装模块(本地或全局)将以您期望的方式将文本文件安装到位

    文本文件安装后如何查找<代码>\uuuDirName提供当前文件的路径。。。如果你问得够早的话。请参阅(如果在闭包中使用
    \uuuu dirname
    ,它可能是封闭函数的路径。)对于“未来”的近期,它看起来不会改变,并且在所有条件下都会按预期工作——无论模块是本地安装还是全局安装,以及其他模块是否依赖于该模块或直接安装

    因此,假设文本文件与当前运行的脚本位于同一目录中:

    var fs = require('fs');
    var path = require('path');
    var dir = __dirname;
    
    function runIt(cb) {
      var fullPath = path.combine(__dirname, 'myfile.txt');
      fs.readFile(fullPath, 'utf8' , function (e,content) {
        if (e) {
          return cb(e);
        }
        // content now has the contents of the file
        cb(content);
      }
    }
    
    module.exports = runIt;
    

    好极了

    第一个问题,为什么是txt文件……第二个问题,该文件的路径重要吗?@Hackerman不一定是
    .txt
    文件。我的想法是要构建一个cli工具(在node.js中,通过npm发布和分发),它可以引用代码中未存储的数据。在我的特殊情况下,我想构建一个脚手架工具,在运行时,它会拾取一个模板文件,稍微转换模板文件,然后将结果保存在运行脚手架任务的本地目录中。该工具需要模板文件的路径,以便在执行时可以读取该文件。在我看来,npm包只是一个带有
    package.json
    的文件夹。因此,如果您包括其他文件,如.txt文件,它应该是可访问的。您想知道它是否可访问,或者如何访问它吗?因为对于后者,您似乎可以像访问常规文件一样访问这些文件。@mgul这也是我对npm的理解。我想我的问题可以重新表述为“我在npm包中的代码文件如何定位到全局安装的npm文件夹的路径,它位于该文件夹中,并且保证可以跨操作系统工作,并且是未来的证明?”一旦我有了它,我就可以构建该文件夹中各个文件的路径,并将它们作为普通文件进行交互。我认为您应该研究这个问题:它本质上为您提供了访问项目根目录以访问其中文件的方法。
    ᚠ   ᚡ   ᚢ   ᚣ   ᚤ   ᚥ   ᚦ   ᚧ   ᚨ   ᚩ   ᚪ   ᚫ   ᚬ   ᚭ   ᚮ   ᚯ
    ᚰ   ᚱ   ᚲ   ᚳ   ᚴ   ᚵ   ᚶ   ᚷ   ᚸ   ᚹ   ᚺ   ᚻ   ᚼ   ᚽ   ᚾ   ᚿ
    ᛀ   ᛁ   ᛂ   ᛃ   ᛄ   ᛅ   ᛆ   ᛇ   ᛈ   ᛉ   ᛊ   ᛋ   ᛌ   ᛍ   ᛎ   ᛏ
    ᛐ   ᛑ   ᛒ   ᛓ   ᛔ   ᛕ   ᛖ   ᛗ   ᛘ   ᛙ   ᛚ   ᛛ   ᛜ   ᛝ   ᛞ   ᛟ
    ᛠ   ᛡ   ᛢ   ᛣ   ᛤ   ᛥ   ᛦ   ᛧ   ᛨ   ᛩ   ᛪ   ᛫   ᛬   ᛭   ᛮ   ᛯ
    
    const magick = require("core.js")
    magick.reload((error)=>{ if(error){throw error}else{ 
      //now you know the SpellBook is loaded
      console.log(SpellBook.length)
    })
    
    var fs = require('fs');
    var path = require('path');
    var dir = __dirname;
    
    function runIt(cb) {
      var fullPath = path.combine(__dirname, 'myfile.txt');
      fs.readFile(fullPath, 'utf8' , function (e,content) {
        if (e) {
          return cb(e);
        }
        // content now has the contents of the file
        cb(content);
      }
    }
    
    module.exports = runIt;