Javascript:在gulpfile.js中获取package.json数据

Lan*_*ane 98 javascript gulp

不是gulp特定的问题本身,但如何从gulpfile.js中的package.json文件获取信息; 例如,我想获取主页或名称并在任务中使用它.

Man*_*utz 136

这不是特定的.

var p = require('./package.json')
p.homepage
Run Code Online (Sandbox Code Playgroud)

更新:

请注意,"require"将缓存读取结果 - 这意味着您不能要求,写入文件,然后再次要求并期望更新结果.

  • 当我看到你的答案时,我当然觉得自己是个白痴.当然! (7认同)

hap*_*ata 111

不要require('./package.json')用于手表过程.使用require将解析模块作为第一个请求的结果.因此,如果您正在编辑package.json,那么除非您停止监视进程并重新启动它,否则这些编辑将无效.对于gulp监视进程,最好使用bitlinguist的方法,因为它将重新读取文件并在每次执行任务时解析它.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
Run Code Online (Sandbox Code Playgroud)

  • 同意"require"会缓存结果(如果您打算再次阅读/修改/再读,则不适合).但是,在所有情况下,这并不是一个糟糕的解决方案.OP明确提到他想从中读取信息. (4认同)
  • 可以使用`require`并使用`delete require.cache [require.resolve(FILEPATH)]删除缓存;` (2认同)

dew*_*ald 6

这是一个很好的解决方案@Mangled Deutz.我自己第一次这样做但它没有用(回到那一秒),然后我尝试了这个解决方案:

# Gulpfile.coffee
requireJSON = (file) ->
    fs = require "fs"
    JSON.parse fs.readFileSync file
Run Code Online (Sandbox Code Playgroud)

现在您应该看到这有点冗长(尽管它有效).require('./package.json')是最好的解决方案:

小费

-remember在文件名前添加'./'.我知道它很简单,但它是require方法工作和不工作之间的区别.