在 Node.js 应用程序中为我的前端包管理器使用 npm 的最佳方式是什么?

What is the best way to use npm for my front end package manager in a Node.js app?

我正在学习 Node.js 和 Express,并计划在前端使用 Angular。我正在为 Node.js 模块使用 npm,但我也想为我的前端依赖项使用 npm。我能找到的所有教程都将 Bower 用于前端库。两者都使用 npm 的推荐方法是什么?

我目前在 public 文件夹中有 Angular 应用程序 运行,我使用 express.static 将其设置为静态文件夹。我在根 node_modules 文件夹和 package.json 中也安装了前端依赖项。为了让 Angular 应用程序访问其中的库,我将 node_modules 也设置为静态目录。这感觉有点不对。

有两个 package.json 文件是个好主意吗?一个在根目录中,一个在 public 文件夹中?或者有没有办法告诉 npm 在根目录中安装一些库,在 public 文件夹(可能是 lib 子文件夹)中安装一些库?

这是我的节点应用程序代码:

var express = require('express');

var app = express();

var port = 3000;

app.use(express.static('public'));
app.use(express.static('node_modules'));

app.get('/', function(req, res) {
    res.send('Hello world');
});

app.listen(port, function(err) {
    console.log('Running server on port ' + port);
});

我的 Angular 应用代码的价值:

<html>
<header>
    <title>My Test Site</title>
    <script src="angular/angular.min.js"></script>
    <script>
        angular.module('MyApp', [])
            .controller('MyController', [function () {
                var ctrl = this;

                // Properties
                ctrl.myTitle = "My Angular App";
            }]);
    </script>
</header>

<body ng-app="MyApp" ng-controller="MyController as myctrl">
    <h2>Welcome to {{ myctrl.myTitle }}</h2>
</body>

</html>

根据上面 mh-cbon 的评论,我将我的 npm 依赖项分成两个 package.json 文件,一个在 Node/server 端的根目录中,一个在 public 文件夹中对于 Angular/ui 方。安装每个都是通过构建过程处理的。这实际上非常有效,因为我计划将服务器端分成 Docker 图像。由于这两部分是分开的,我可以轻松地使用 Docker 卷来处理容器外部的 Angular 代码。

对 Node 应用程序的唯一更改是删除 node_modules 上的静态调用:

var express = require('express');

var app = express();

var port = 3000;

app.use(express.static('public'));

app.get('/', function(req, res) {
    res.send('Hello world');
});

app.listen(port, function(err) {
    console.log('Running server on port ' + port);
});