javascript - Grunt Browserify - require.resolve 不是函数

标签 javascript node.js gruntjs browserify

我正在使用 grunt-browserify通过以下方式:

   browserify:
      build:
        files:
          '<%= paths.staticJS %>/Login.js'                : '<%= paths.buildSrcJS %>/modules/login/Login.js'
          '<%= paths.staticJS %>/Password.js'             : '<%= paths.buildSrcJS %>/modules/password/Password.js'
          '<%= paths.staticJS %>/RequestPasswordReset.js' : '<%= paths.buildSrcJS %>/modules/password/RequestPasswordReset.js'
          '<%= paths.staticJS %>/ResetPassword.js'        : '<%= paths.buildSrcJS %>/modules/password/ResetPassword.js'
          '<%= paths.staticJS %>/ClientRouter.js'         : '<%= paths.buildSrcJS %>/shared/ClientRouter.js'

一般来说它工作正常,但我仍然有一个问题, 在我的代码的某些部分,我正在使用 Node require 模块,如下所示:

  chartViewPath = "../../charts/view/#{chartViewName}"
  resolvedPath = require.resolve(chartViewPath)
  chartViewModule = require.modules[resolvedPath]

我收到以下错误:require.resolve is not a function

我试图在 grunt 任务中使用别名公开全局需求:

  options:
    alias: [
      '<%= paths.buildSrcJS %>/modules/login/Login.js:Login'
      '<%= paths.buildSrcJS %>/modules/password/Password.js:Password'
      '<%= paths.buildSrcJS %>/modules/password/RequestPasswordReset.js:RequestPasswordReset'
      '<%= paths.buildSrcJS %>/modules/password/ResetPassword.js:ResetPassword'
      '<%= paths.buildSrcJS %>/shared/ClientRouter.js:ClientRouter'
    ]

它确实将 require 变量公开为一个函数,但我仍然无法使用 require.resolvemodules 方法。

我还应该提到,在转向 grunt 之前,我使用 CakefileBrowserify 我的文件

task 'build','build for development environment', (options)->

  fs = require 'fs'
  path = require 'path'
  browserify = require 'browserify'
  routers = [ "modules/login/Login","shared/ClientRouter","modules/password/Password","modules/password/RequestPasswordReset", "modules/password/ResetPassword" ]
  routers.forEach((r)->
    jsSource = path.resolve(__dirname + "/src/main/#{r}.coffee")
    jsDestination = path.resolve( "#{__dirname}/../static/js/#{r.split('/').slice(-1)}.js" )
    browserified = browserify(jsSource, { entry : [] }).bundle()
    fs.writeFile(jsDestination, browserified, (err)-> if err then console.log "error writing file:#{err}")
  )

这样它工作正常,我可以使用 require.resolverequire.modules 因为出于某种原因,browserify 以这种方式添加到每个条目的开头 像这样将这些方法归档 gist .

最佳答案

grunt-browserify 可能依赖于与您之前使用的版本不同的 browserify 版本。使用 npm ls 检查您之前的版本,看看它是否与 grunt-browerify 想要的版本不同。

除此之外,我没有发现您的原始脚本与 Grunt 插件尝试执行的操作之间存在显着差异。

关于javascript - Grunt Browserify - require.resolve 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242192/

相关文章:

node.js - package-lock.json 会阻止更新吗?

javascript - 如何在 JavaScript 中对 JSON 数组应用过滤器?

node.js - 如何将 Git 哈希写入( Node 的)package.json?

javascript - dc.js:设置具有宽域的分类条形图 X 轴

javascript - 根据周数划分一个月。 JS

父级上的javascript重定向

gruntjs - Grunt watch 警告 : EPERM, 不允许操作

javascript - 无法清除 Canvas

node.js - express.js 中的服务器端 "redirect"

javascript - grunt sass 任务由于 bourbon 包而产生错误