2016-12-17 3 views
1

Я просто изучаю Node.js и Express с планом использования Angular для интерфейса. Я использую npm для модулей Node.js, но я также хотел бы использовать npm для моих внешних зависимостей. Все учебники, которые я могу найти, используют Bower для библиотек frontend. Каков рекомендуемый способ использования npm для обоих?Каков наилучший способ использования npm для моего менеджера пакетов в приложении Node.js?

У меня в настоящее время приложение Angular работает в общей папке, которую я установил как статическую папку, используя express.static. У меня есть зависимостей frontend, также установленных в корневой папке node_modules и package.json. Чтобы приложение «Угловое» было доступно для доступа к библиотекам, у меня есть node_modules, также устанавливаемый как статический каталог. Это не так хорошо.

Это хорошая идея иметь два файла package.json? Один в корне и один в общей папке? Или есть способ сказать npm для установки некоторых библиотек в корневом каталоге и некоторых в общей папке (возможно, в подпапке 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); 
}); 

И мой Угловой код приложения для чего это стоит:

<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> 
+1

'У меня есть node_modules также установки в качестве статического каталога. Это почему-то не так. они представляют собой различное программное обеспечение, обменивающееся с помощью своего рода api. В качестве двух разных программ у них есть два разных дерева депо, два разных файла пакета и так далее. В противном случае вы используете построитель активов (gulp, grunt, webpack), и вы будете ссылаться на свою зависимость от приложения на стороне клиента, чтобы создать сборку, которая будет загружена на стороне клиента. –

+0

@ mh-cbon Итак, вы предлагаете иметь два отдельных файла package.json, один для приложения Node и один для публичного приложения? – Jason

+0

да, это одна возможность, которую я бы не боялся. –

ответ

0

На основе замечаний Mh-cbon в выше я отделенном моем зависимости НОЙ в два package.json, один в корне для узла/сервера и один в общей папке для угловой/ui стороны. Установка каждого из них осуществляется через процесс сборки. Это действительно сработало очень хорошо, поскольку я планирую отделить серверную сторону от изображения Docker. Поскольку эти две части являются отдельными, я могу легко использовать громкость Docker для работы с моим угловым кодом, внешним по отношению к контейнеру.

Единственное изменение в приложение узла, чтобы удалить статический вызов 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); 
});