Javascript 错误:找不到 npm 模块“时刻”

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/39413119/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 22:32:27  来源:igfitidea点击:

Error: Can't find npm module 'moment'

javascriptmeteorherokunpm

提问by Richard

I have a Meteor app that runs perfectly on localhost, but when I deploy it to a remote herokuserver, I get the following errors.

我有一个在本地主机上完美运行的 Meteor 应用程序,但是当我将它部署到远程heroku服务器时,出现以下错误。

(I am implementing this)

(我正在实施这个

Any ideas how to fix this please?

任何想法如何解决这个问题?

2016-09-09T13:26:02.533532+00:00 heroku[web.1]: Starting process with command `.meteor/heroku_build/bin/node .meteor/heroku_build/app/main.js`
2016-09-09T13:26:06.806440+00:00 heroku[web.1]: Process exited with status 1
2016-09-09T13:26:06.813921+00:00 heroku[web.1]: State changed from starting to crashed
2016-09-09T13:26:06.704013+00:00 app[web.1]: /app/.meteor/heroku_build/app/programs/server/node_modules/fibers/future.js:280
2016-09-09T13:26:06.704027+00:00 app[web.1]:                        throw(ex);
2016-09-09T13:26:06.704028+00:00 app[web.1]:                        ^
2016-09-09T13:26:06.704029+00:00 app[web.1]: 
2016-09-09T13:26:06.704030+00:00 app[web.1]: Error: Can't find npm module 'moment'. Did you forget to call 'Npm.depends' in package.js within the 'modules-runtime' package?
2016-09-09T13:26:06.704031+00:00 app[web.1]:     at Object.Npm.require (/app/.meteor/heroku_build/app/programs/server/boot.js:198:17)
2016-09-09T13:26:06.704032+00:00 app[web.1]:     at options.fallback (packages/modules-runtime/modules-runtime.js:21:1)
2016-09-09T13:26:06.704032+00:00 app[web.1]:     at require (packages/modules-runtime/.npm/package/node_modules/install/install.js:88:1)
2016-09-09T13:26:06.704033+00:00 app[web.1]:     at meteorInstall.server.main.js (server/main.ts:1:19)
2016-09-09T13:26:06.704035+00:00 app[web.1]:     at require (packages/modules-runtime/.npm/package/node_modules/install/install.js:82:1)
2016-09-09T13:26:06.704035+00:00 app[web.1]:     at server/main.ts:65:4
2016-09-09T13:26:06.704036+00:00 app[web.1]:     at /app/.meteor/heroku_build/app/programs/server/boot.js:292:10
2016-09-09T13:26:06.704036+00:00 app[web.1]:     at Array.forEach (native)

If I heroku run bashto log onto heroku. In /app/typings/globalsI see the following:

如果我heroku run bash登录到heroku。在/app/typings/globals我看到以下内容:

es6-collections  es6-promise  google-maps  google.maps  meteor  moment

This seems to match what is on the Windows localhost:

这似乎与 Windows 本地主机上的内容相匹配:

enter image description here

在此处输入图片说明

Moments also exist in node_modules

时刻也存在于 node_modules

enter image description here

在此处输入图片说明

Here is my node_modules\moment\package.js:

这是my node_modules\moment\package.js

var profile = {
    resourceTags: {
        ignore: function(filename, mid){
            // only include moment/moment
            return mid != "moment/moment";
        },
        amd: function(filename, mid){
            return /\.js$/.test(filename);
        }
    }
};

My package.json:

我的package.json

{
  "dependencies": {
    "@angular/common": "^2.0.0-rc.4",
    "@angular/compiler": "^2.0.0-rc.4",
    "@angular/core": "^2.0.0-rc.4",
    "@angular/forms": "^0.2.0",
    "@angular/http": "^2.0.0-rc.4",
    "@angular/platform-browser": "^2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "^2.0.0-rc.4",
    "@ionic/cloud-angular": "^0.4.0",
    "angular2-meteor": "^0.6.2",
    "angular2-moment": "^0.8.2",
    "es6-shim": "^0.35.0",
    "ionic-angular": "^2.0.0-beta.11",
    "ionic-native": "1.3.2",
    "ionicons": "3.0.0",
    "meteor-client-side": "^1.3.4",
    "moment": "^2.14.1",
    "reflect-metadata": "^0.1.3",
    "rxjs": "5.0.0-beta.6",
    "socket.io": "^1.4.8",
    "zone.js": "^0.6.12"
  },

snippet from logs when deploying:

部署时的日志片段:

remote: -----> Building Meteor app with ROOT_URL: https://git.heroku.com/remote-thewhozoo.git
remote: server/collections.ts (1, 21): Cannot find module 'meteor/mongo'.
remote: server/collections.ts (2, 29): Cannot find module 'api/models'.
remote: server/methods.ts (1, 22): Cannot find module 'meteor/meteor'.
remote: server/methods.ts (2, 28): Cannot find module 'meteor/check'.
remote: server/main.ts (1, 25): Cannot find module 'moment'.
remote: server/main.ts (2, 22): Cannot find module 'meteor/meteor'.
remote:
remote: Unable to resolve some modules:
remote:
remote:   "moment" in /tmp/build_29ec6195d953bd56c0670f7d9ee489a4/server/main.js
remote: (os.linux.x86_64)
remote:
remote: If you notice problems related to these missing modules, consider running:
remote:
remote:   meteor npm install --save moment
remote:
remote: -----> Moving built slug to /tmp/build_29ec6195d953bd56c0670f7d9ee489a4/.meteor/heroku_build/app
remote: -----> Installing npm production dependencies on built slug
remote:
remote: > [email protected] install /tmp/build_29ec6195d953bd56c0670f7d9ee489a4/.meteor/heroku_build/app/programs/server/node_modules/fibers
remote: > node build.js || nodejs build.js
remote:
remote: `linux-x64-v8-4.5` exists; testing
remote: Binary is fine; exiting
remote:
remote: > [email protected] install /tmp/build_29ec6195d953bd56c0670f7d9ee489a4/.meteor/heroku_build/app/programs/server
remote: > node npm-rebuild.js
remote:
remote: {
remote:   "meteor-dev-bundle": "0.0.0",
remote:   "npm": "3.10.6",
remote:   "ares": "1.10.1-DEV",
remote:   "http_parser": "2.7.0",
remote:   "icu": "56.1",
remote:   "modules": "46",
remote:   "node": "4.5.0",
remote:   "openssl": "1.0.2h",
remote:   "uv": "1.9.1",
remote:   "v8": "4.5.103.37",
remote:   "zlib": "1.2.8"
remote: }

index.d.ts

索引.d.ts

declare module 'moment' {
    var moment: moment.MomentStatic;
    export = moment;
}

I do have symbolic links in the root of the meteor project:

我确实在流星项目的根目录中有符号链接:

enter image description here

在此处输入图片说明

UPDATE

更新

I have found the problem I think, but I am not 100% sure how to solve it yet.

我已经找到了我认为的问题,但我还不是 100% 确定如何解决它。

The issue is that the symbolic links are pointing to directories that exist locally, but not on the remote server.

问题是符号链接指向本地存在的目录,但不在远程服务器上。

enter image description here

在此处输入图片说明

UPDATE

更新

I remove all symbolic links, and have the files there instead, deploy, and I still get the same error when the server tries to start:

我删除了所有符号链接,并在那里部署了文件,但当服务器尝试启动时,我仍然遇到相同的错误:

2016-09-11T15:23:06.155551+00:00 heroku[web.1]: State changed from crashed to starting
2016-09-11T15:23:09.146909+00:00 heroku[web.1]: Starting process with command `.meteor/heroku_build/bin/node .meteor/heroku_build/app/main.js`
2016-09-11T15:23:13.712742+00:00 heroku[web.1]: State changed from starting to crashed
2016-09-11T15:23:13.640003+00:00 app[web.1]: /app/.meteor/heroku_build/app/programs/server/node_modules/fibers/future.js:280
2016-09-11T15:23:13.640048+00:00 app[web.1]:                        throw(ex);
2016-09-11T15:23:13.640073+00:00 app[web.1]:                        ^
2016-09-11T15:23:13.640075+00:00 app[web.1]: Error: Can't find npm module 'moment'. Did you forget to call 'Npm.depends' in package.js within the 'modules-runtime' package?
2016-09-11T15:23:13.640076+00:00 app[web.1]:     at Object.Npm.require (/app/.meteor/heroku_build/app/programs/server/boot.js:198:17)
2016-09-11T15:23:13.640077+00:00 app[web.1]:     at options.fallback (packages/modules-runtime/modules-runtime.js:21:1)
2016-09-11T15:23:13.640078+00:00 app[web.1]:     at meteorInstall.server.main.js (server/main.ts:1:19)
2016-09-11T15:23:13.640079+00:00 app[web.1]:     at require (packages/modules-runtime/.npm/package/node_modules/install/install.js:82:1)
2016-09-11T15:23:13.640079+00:00 app[web.1]:     at server/main.ts:65:4
2016-09-11T15:23:13.723869+00:00 heroku[web.1]: Process exited with status 1

Any Ideas please?

请问有什么想法吗?

I have run: meteor npm install --save

我跑了: meteor npm install --save

I have found this in boot.js, but I am not sure what the author was doing.

我在 中找到了这个boot.js,但我不确定作者在做什么。

    try {
      return require(name);
    } catch (e) {
      // Try to guess the package name so we can print a nice
      // error message
      // fileInfo.path is a standard path, use files.pathSep
      var filePathParts = fileInfo.path.split(files.pathSep);
      var packageName = filePathParts[1].replace(/\.js$/, '');

      // XXX better message
      throw new Error(
        "Can't find npm module '" + name +
          "'. Did you forget to call 'Npm.depends' in package.js " +
          "within the '" + packageName + "' package?");
      }

UPDATE

更新

I removed the .gitignoreof node_modules/, and I don't get any errors now.

我删除了.gitignoreof node_modules/,现在没有任何错误。

enter image description here

在此处输入图片说明

However, I am new to Meteor, so not sure how to test this. But when I try invoke the app with http://remote-thewhozoo.herokuapp.com/or https://remote-thewhozoo.herokuapp.com/I get a 404 error:

但是,我是 Meteor 的新手,所以不确定如何测试。但是,当我尝试使用http://remote-thewhozoo.herokuapp.com/或调用应用程序时,https://remote-thewhozoo.herokuapp.com/出现 404 错误:

2016-09-11T16:20:15.183895+00:00 heroku[router]: at=info method=GET path="/sockjs/info?cb=jwgw2yuvgl" host=remote-thewhozoo.herokuapp.com request_id=a49fafb2-9708-46d2-8117-2c789bfa6a3e fwd="105.186.215.147" dyno=web.1 connect=1ms service=2ms status=404 bytes=132

enter image description here

在此处输入图片说明

I do check the Mongo Database, and it has got the collections created by my app. So Meteor must be running, I just don't know how to access it.

我确实检查了 Mongo 数据库,它有我的应用程序创建的集合。所以 Meteor 一定在运行,我只是不知道如何访问它。

enter image description here

在此处输入图片说明

Any ideas please?

请问有什么想法吗?

回答by Loay

Make sure this line:"moment": "^2.14.1"is your package.json then run npm install

确保这一行:"moment": "^2.14.1"是你的 package.json 然后运行npm install

回答by sitarhero

Can you try meteor npm installin your project root?

你可以meteor npm install在你的项目根目录中尝试吗?

If moment didn't appear in that list, can you try meteor npm install --save moment?

如果 moment 没有出现在该列表中,您可以尝试meteor npm install --save moment吗?

Otherwise, could you please post your package.js - it should be in app/programs/server/

否则,您能否发布您的 package.js - 它应该在 app/programs/server/

回答by ickyrr

I think it's a problem with your buildpack. Try following this guide - https://meteorcoder.wordpress.com/2016/09/24/how-to-deploy-meteor-apps-with-heroku/

我认为这是您的 buildpack 的问题。尝试遵循本指南 - https://meteorcoder.wordpress.com/2016/09/24/how-to-deploy-meteor-apps-with-heroku/