【问题标题】:Npm module not found未找到 Npm 模块
【发布时间】:2017-03-22 16:33:01
【问题描述】:

我正在运行一个使用 Grunt 构建并使用 Bower 和 NPM 的 Angular 应用程序。

我尝试在本地安装我的 npm 模块。这些文件位于node_modules 文件夹中的主应用程序目录中。

模块文档要求我使用 <script type="text/javascript" src="node_modules/moment/moment.js"></script> 加载模块,但我得到 404。

我错过了什么吗?我必须告诉 Grunt 我想要这些 NPM 模块吗?

【问题讨论】:

  • 如果没有看到你的项目,或者至少没有关于你的项目是如何组织的更多信息,这是不可能回答这个问题的。您确定该时刻已安装在您的节点模块中吗?你的 gruntfile 在做什么?你在哪里添加这个脚本标签?如果你有一个公开的 GitHub 存储库,我很乐意看看
  • 我确定它已安装并在 package.json 中。我不知道 node_modules 是否应该编译到dist 文件夹中。它不存在,但bower_components 存在。这是我唯一能想到的。
  • @user841760 你有解决办法吗?我正在开发一个 ReactJS 项目并面临同样的问题。 TIA

标签: javascript angularjs node.js


【解决方案1】:

您能否提供更多关于您的应用是用什么构建的信息?如果节点为您的应用程序提供服务,您需要将链接到的目录设为公开。假设您使用的是 express,这在您的 app.js 文件中看起来像这样:

app.use('/node_modules', express.static(__dirname + '/node_modules/moment/moment.js'));

编辑: 或者,如果您只是想让它工作,请尝试从 CDN 加载 moment.js,如下所示:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script>

Link 关注 CDN

【讨论】:

  • 我用过这个生成器link
  • 我不使用快递。有没有一种方法可以让我使用 npm 模块而无需添加另一个框架?
  • 您可能想查看this file 并将路径添加到node_modules/moment/moment.js
  • 虽然这似乎只是一种使用连接到主应用程序 js 文件的控制器添加简单路由的方法
  • 我对 angular 真的不太了解,所以可能找错地方了。但是,我怀疑您必须在某个地方指示您的应用程序将 node_modules 中的时刻文件视为静态资源,以便它可以从 html 加载它。如果你想让它工作,你也可以尝试将脚本源更改为https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js。也许这是最简单的解决方案:)
【解决方案2】:

基本上,npm 是所有 javaScript 框架(如 Nodejs、angularjs 等)的包管理器。npm 应该在机器中全局安装。您可以从https://nodejs.org/en/ 安装它。

接下来,您需要检查项目中的 package.json 文件。

如果您的项目文件夹中有 package.json 已经存在,那么您需要从命令行转到您的项目文件夹并键入 npm start

如果package.json文件不存在,那么在命令行输入npm init,就会有一个package.json在您的项目文件夹中创建的文件。然后编辑 package.json 。并以与此类似的方式将节点包添加到 package.json

{
  "name": "shoppingkart",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www" //If you have any scripts.
  },
  "dependencies": {
    "mongoose": "^4.9.0",  // here you should have all your node_modules listed
    "passport": "^0.3.2",
    "stripe": "^4.15.1"
  }
}

如果您无法将依赖项添加到 json 文件中,还有另一种方法可以做到这一点。 只需在命令行中转到您的项目目录并键入

npm install --save grunt // And you need to do for all the node_modules, by replacing the **grunt**.

依赖项会自动添加到您的 package.json 文件中。

【讨论】:

  • 我有一个package.json。我正在使用--save 标志添加所有依赖项。不是这样的。
  • 您是否在 .js 文件的顶部包含模块,例如 require('mongoose') 或类似的东西。你能分享你的 package.json 文件吗?你有没有在 app.js 中启动服务器。
  • 是的,我已经运行了grunt serve。在使用--save 标志安装模块后,我在package.json 中添加了这个:"dependencies": { "angular-bootstrap-datetimepicker": "^1.1.3" } 但我没有说 require('module')。我确实使用了&lt;script src="node_modules/moment/moment.js"&gt;&lt;/script&gt;
  • 请注意moment.js 是上述 npm 模块的依赖项
  • 我不能在 js 中使用require,因为它没有被定义。在 Angular 模块中添加对模块依赖项的依赖会给我更多错误,即 $injector.modulerr 错误,它抱怨模块不存在
【解决方案3】:

如果您在本地安装了 npm 包,那么您的 node_modules 文件夹应该位于项目的根目录中。

如果您在全局范围内安装了所有软件包,您可能在项目中看不到 npm_modules 文件夹。

要查看全局模块的位置,您可以运行

npm list -g 

【讨论】:

  • 它安装在本地,并且 npm 文件夹在根目录下,应该是这样。我想我应该可以从 root 引用它,但我不断收到 404
  • 啊,我明白了,npm list 显示模块的npm ERR! extraneous
  • 好的,这是因为我已经隐藏了更改。我再次使用--save 标志安装了模块,但它仍然抛出 404
【解决方案4】:

我遇到了同样的问题,只需全局安装软件包并在最后保存。

喜欢:

npm install -g &lt;package&gt; --save

即使上述方法也不起作用,请在最后使用-f / --force 强制安装。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 2018-03-29
    • 2016-06-17
    • 1970-01-01
    • 2014-08-24
    • 2015-12-16
    • 2016-04-29
    • 2014-11-18
    相关资源
    最近更新 更多