javascript - Node js 如何使用 "node_modules"库而不是 "src =<cdn>"

标签 javascript angularjs node.js

我知道这是一个反复出现的问题,但我没有看到我完全理解的答案。

我在我的 Node js 应用程序中使用,在我的 index.html 中有一些 cdn 地址。

即:

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js"></script>

但是我的 node_modules 目录中也有这个文件夹。所以我真的不需要使用 cdn。我可以只使用我的 node_modules 目录中的文件。

问题是怎么来的? 现在我有这个:

app.use(express.static(path.join(__dirname, '/')));

在我的 server.js 文件中。

但这不是我的 Node mudles 文件夹的路径(它与我的 index.html 在相同的根路径下)。

我试着写这样的东西:

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

并在我的 index.html 中编写如下内容:

<script src="scripts/angular-ui-router/angular-ui-router.min.js"></script>

但是当我到达 localhost:3000 时应用程序甚至没有启动 因为我得到了这个错误:

Error: ENOENT, stat  ......   at Error (native)

我的问题是: 1. 我需要在我的 server.js 中写什么而不是 app.use(express.static(path.join(__dirname, '/')));

2.我需要在我的 index.html 文件中写什么而不是:

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js"></script>

这是我在简单添加时收到的消息:

 app.use('/scripts', express.static(path.join(__dirname,
'node_modules')));

错误:

Error: ENOENT, stat 'C:\<path_to_my_project>\server_modules\index.html'
   at Error (native)

我不知道它为什么要在那里寻找文件...我确实有一个名为“server_modules”的文件夹,但这不是我的 index.html 所在的位置... 这是我的文件结构

- my_project
- - server.js
- - index.html
- - node_modules
- - server_modules

这是我的 server.js

// ---------------- define third Party dependencies)
var express = require('express');
var app = express();
var http = require('http').Server(app);
var path = require('path');
var assert = require('assert');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var jwt = require('jsonwebtoken');
var expressJwt = require('express-jwt');




// ---------------- config the app
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json());

 app.use('/scripts', express.static(path.join(__dirname,
'node_modules')));


// ---------------- define the server handlers (internal dependencies)
var dbHandler = require('./server_modules/dbHandler.js');
var httpRequesetHandler = require('./server_modules/httpRequesetHandler.js').getHttpRequestHandler(dbHandler, app,jwt,expressJwt);
var io = require('./server_modules/socketHandler.js').listen(http, dbHandler);

// ---------------- start the server
http.listen((process.env.PORT || 3000), function () {
    dbHandler.get_random_room();
    console.log('listening on *:3000 ' + __dirname);
});

另外:我在我的单页应用程序上使用 angular 进行路由

谢谢

最佳答案

不确定为什么会收到您遇到的错误。我能够成功地完成您的要求。我的步骤:

  1. npm install --save angular-ui-router
  2. 在我的 index.hml 中 写道:<script src='/scripts/angular-ui-router/release/angular-ui-router.min.js' type='text/javascript'></script>
  3. 在 server.js 中我添加了: app.use('/scripts', express.static(path.join(__dirname, 'node_modules')));

运行它,没有问题。

查看您的代码,您似乎指向了一个基于 angular-ui 模块结构不应该存在的文件路径。您还应该注意 html 文件中的路径语法,“scripts/whatever”与“/scripts/whatever”不同。

** 编辑 **

如果您想从多个位置提供静态文件,只需多次声明中间件即可,例如:

// serve files in /public directory from the root of the site, e.g. http://example.com/index.html would serve the file /public/index.html
app.use(express.static(path.join(__dirname, 'public')));

// also serve files in /node_modules from /scripts.  So /node_modules/angular-ui-router/release/angular-ui-router.js would be found at /scripts/angular-ui-router/release/angular-ui-router.js
app.use('/scripts', express.static(path.join(__dirname,'node_modules')));

关于javascript - Node js 如何使用 "node_modules"库而不是 "src =<cdn>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40695764/

相关文章:

JavaScript 正则表达式 - 空格、逗号和斜线

javascript - 我希望动画在事件状态下触发并在事件状态消失后继续

javascript - 关于 request.addListener 的回调函数

node.js - 在 Node webkit 上使用 phantom

javascript - 计算器按钮突出

javascript - 如何在 jQuery.noConflict() 之后访问 jQuery; - 没有命名空间

javascript - ng-pattern 在 Angularjs 中验证个位数

javascript - 仅针对某些页面制作 ng-view 动画

angularjs - 使用 AngularJS 和 $resource 保存新模型

node.js - Selenium WebdriverIO ECONNREFUSED