错误:找不到模块'jade~'。

9

我是一个新手,正在学习Node.js。我使用Compound Js创建了一个CRUD操作。

在尝试弹出一个值后,应用程序一直运行良好,但现在我遇到了错误。

500 Error: Cannot find module 'jade~'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)

如何解决这个问题

我的索引

#tabs
  ul
    li
      a(href='#tabs-1') New Leave
    li
      a(href='#tabs-2') Index of Leave
  #tabs-1
    .page-header
      h1 New employee

    - var form = formFor(employee, {action: pathTo.employees(), method: 'POST', id: "employee_form", class: 'form-horizontal'})

    != form.begin()
    != errorMessagesFor(employee) 
    .control-group
      != form.label("code", false, {class: "control-label"})
      .controls
        != form.input("code")
    .control-group
     != form.label("description", false, {class: "control-label"})
      .controls
        != form.input("description")
    .control-group
      != form.label("applicable", false, {class: "control-label"})
      .controls
        != form.input("applicable")
    .control-group
      != form.label("cForward", false, {class: "control-label"})
      .controls
        != form.checkbox("cForward")
    .control-group
      != form.label("limit", false, {class: "control-label"})
      .controls
        != form.checkbox("limit")
    .control-group
      != form.label("lop", false, {class: "control-label"})
      .controls
        != form.checkbox("lop")
    .control-group
      != form.label("od", false, {class: "control-label"})
      .controls
        != form.checkbox("od")
    .control-group
      != form.label("co", false, {class: "control-label"})
      .controls
        != form.checkbox("co")
    .control-group
      != form.label("lrevision", false, {class: "control-label"})
      .controls
        != form.checkbox("lrevision")
    .control-group
      != form.label("active", false, {class: "control-label"})
      .controls
        != form.checkbox("active")
    .form-actions
      != form.submit('<i class="icon-ok icon-white"></i>  Create employee', {class: 'btn btn-primary'})
      span= ' or '
      != linkTo('Cancel', pathTo.employees(), {class: 'btn'})
    != form.end()
  #tabs-2
    .page-header
      h1 Index of employees


    .row
      .span12
         p
            != linkTo('<i class="icon-plus icon-white"></i> New employee', path_to.new_employee(), {class: 'btn btn-primary'})

    - if (employees.length) {
    .row
      .span12
         table.table.table-striped
           thead
             tr
               th ID
               th.span3 Actions
           tbody
             - employees.forEach(function (employee) {
             tr
               td
                 != linkTo('employee #' + employee.id, path_to.employee(employee))
               td
                 != linkTo('<i class="icon-edit"></i> Edit', pathTo.edit_employee(employee), {class: 'btn btn-mini'}) + ' '
                 != linkTo('<i class="icon-remove icon-white"></i> Delete', pathTo.employee(employee), {class: 'btn btn-mini btn-danger', method: 'delete', remote: true, jsonp: '(function (u) {location.href = u;})'})
             - });
    - } else{
    .row
      .span12
         p.alert.alert-block.alert-info
            strong No employees were found.
    - } 

布局文件

!!! 5
html
  head
    title= title
    != stylesheetLinkTag('http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/base/jquery-ui.css', 'bootstrap', 'application', 'bootstrap-responsive')
    != javascriptIncludeTag('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.js', 'rails', 'application')
    script
      $(document).ready(function() {
        $("#tabs").tabs();
      });
    != csrfMetaTag()
  body
    .navbar
        .navbar-inner
            .container
               a.brand(href='#') Project name

    .container
      - var flash = request.flash('info').pop(); if (flash) {
        .alert.alert-info= flash
      - }

      - flash = request.flash('error').pop(); if (flash) {
        .alert.alert-error= flash
      - }

      != body

      hr
      footer
        p © Company 2012
  != contentFor('javascripts')
7个回答

27

我在nodeschool的expressworks教程中遇到了同样的问题。解决方法是在package.json中包含所需的依赖项:

npm install --save express jade

这对我很有帮助。阅读后,我意识到我不知何故从我的项目的package.json中删除了jade模块,这就是为什么它找不到的原因。将其添加回去,进行npm更新,一切正常。 - bearvarine
它也帮助了我 :) - AnNaMaLaI
谢谢您。我一直在使用Team Treehouse学习Node.js,他们有一个完整的Jade(现在更名为Pug)部分,并且经历了很多次尝试才使其正常工作。从中吸取了教训。 - Joe Hill
让我和许多人感到惊讶的是,这对我而言实际上比默认解决方案更有效。 - ASCIIbetical

18

我遇到了相似的问题,但错误提示信息是"Cannot find module 'jade'"而不是'jade~',我确定我已经执行了"npm install jade"操作。经过一段时间的研究后,我发现这个问题是因为我在全局安装了express,而jade是本地安装的,参考了这篇帮助文档https://www.openshift.com/forums/express/nodejs-and-jade-error-cannot-find-module-jade后,解决了我的问题。我在这里发布这篇文章,希望能帮助其他遇到同样问题的人 :)


11

对我来说,问题的实质是不同的。我曾经在本地和全局都安装了jade和express,希望它们可以以某种方式找到彼此,但是express仍然抱怨jade。

我的错误看起来像这样:

Express server listening on port 3000
Error: Cannot find module 'jade'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at new View (/Users/ajeetganga/node_modules/express/lib/view.js:43:49)
    at Function.app.render (/Users/ajeetganga/node_modules/express/lib/application.js:488:12)
    at ServerResponse.res.render (/Users/ajeetganga/node_modules/express/lib/response.js:798:7)
    at exports.index (/Users/ajeetganga/Documents/WORKSPACE/TinyUrl/MyTinyUrl2/routes/index.js:7:7)
    at callbacks (/Users/ajeetganga/node_modules/express/lib/router/index.js:164:37)
    at param (/Users/ajeetganga/node_modules/express/lib/router/index.js:138:11)

如果你观察这一行:

at new View (/Users/ajeetganga/node_modules/express/lib/view.js:43:49)

您会发现这不是默认的npm全局或本地安装位置.. 因此,我选择将jade安装在以下文件夹中作为解决办法。

cd /Users/ajeetganga/node_modules/
npm install jade

我认为,即使我从文件夹 /Users/ajeetganga/ 安装jade,也会起作用,但我从未尝试过。:)


我在手动创建express项目并在eclipse上运行时遇到了相同的错误堆栈跟踪。像您建议的那样,在项目的根目录下安装了Jade,它起作用了。 - Venkat

5

问题出在我正在使用的Fedora-16操作系统上。在编辑文件时创建的临时文件,例如“index.jade〜”,没有被清除,因此问题就产生了。

在Fedora-16中,这个问题可以通过删除临时文件“index.jade〜”将节点模块“jade”重命名为“jade〜”来解决。


2

在使用Emacs编辑jade文件后,我遇到了同样的问题。解决方法相当简单:找到jade~文件并将其删除。


2

嗯,你几乎可以肯定是在require('jade~')中有一个简单的拼写错误,你想要的应该是require('jade')。检查你的express app.engine('jade')行,这也很可能是另一个问题。


1
你可能已经将文件命名为server.jsapp.js。有限的可用证据强烈指向一个非常简单、基本的拼写错误。搜索你的文件中的jade~并修复它,然后继续你的生活。你认为在添加警报之前它一直正常工作,但你肯定是误导了。在node.js中没有警报,而在浏览器中发生的事情不会导致node无法找到jade模块。 - Peter Lyons
没有什么可以作为玉的。 - Okky
Lysons:应用程序中没有像玉一样的东西。我搜索了整个文件。 - Okky
更新问题。发布您的.js文件。您的.jade文件是无关紧要的。 - Peter Lyons
@Lysons 你可以具体说明是哪个文件吗? - Okky
不,错误信息没有具体说明,所以我无法确定。我无法访问您的源代码,也不是千里眼。按照我的要求发布您的.js文件。否则,请向当地的某个人寻求帮助。您在这里提供的信息不足以让远程的任何人提供帮助。 - Peter Lyons

1

我遇到了同样的问题(在我的TypeScript + Webpack项目中使用jade-loader)。我通过安装jade-loader作为peer-dependency解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接