Не удается найти node_modules после развертывания

Этот заголовок может немного ввести в заблуждение, но, пожалуйста, несите меня некоторое время.

Я сделал простое приложение Angular2 на visual studio 2015, и теперь у меня есть published it on Azure.

Наличие node_modules в среде разработки было совершенным, но после его развертывания отображается сообщение об ошибке, которое не может найти node_modules.

Вот как я имею в виду в моем развитии env в index.html -

<!-- Polyfill(s) for older browsers -->
    <script src="/node_modules/core-js/client/shim.min.js"></script>
    <script src="/node_modules/zone.js/dist/zone.js"></script>
    <script src="/node_modules/reflect-metadata/Reflect.js"></script>
    <script src="/node_modules/systemjs/dist/system.src.js"></script>
    <script src="/systemjs.config.js"></script>

Он также упоминается в system.config.js -

/**
* System configuration for Angular 2 samples
* Adjust as necessary for your application needs.
*/
(function(global) {

// map tells the System loader where to look for things
var map = {
'app':                        '/app', // 'dist',

'@angular':                   '/node_modules/@angular',
'angular2-in-memory-web-api': '/node_modules/angular2-in-memory-web-api',
'rxjs':                       '/node_modules/rxjs'
};

// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app':                        { main: 'main.js',  defaultExtension: 'js' },
'rxjs':                       { defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
};

var ngPackageNames = [
'common',
'compiler',
'core',
'forms',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade',
];

// Individual files (~300 requests):
function packIndex(pkgName) {
packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
}

// Bundled (~40 requests):
function packUmd(pkgName) {
packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
}

// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;

// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);

// No umd for router yet
packages['@angular/router'] = { main: 'index.js', defaultExtension: 'js' };

var config = {
map: map,
packages: packages
};

System.config(config);

})(this);

Ошибка имеет смысл, так как у меня есть файл .gitignore, который не позволяет node_modules развертываться на сервере.

Может кто-то может помочь в том, как я могу запустить его после развертывания и какие изменения могут быть сделаны с помощью приведенных выше ссылок, чтобы заставить его работать.

Ответ 1

Я не использовал SystemJS, но ваша щедрость заставила меня попробовать ответить в любом случае, так как похоже, что вам все еще нужен ответ.:)

Посмотрев на некоторые документы SystemJS, похоже, что ваш index.html должен отличаться для разработки и использования. Это то, что показывают документы для development:

<script src="systemjs/dist/system.js"></script>
<script>
  SystemJS.import('/js/main.js');
</script>

И это то, что они показывают для production (обратите внимание, что первая строка имеет другой путь src):

<script src="systemjs/dist/system-production.js"></script>
<script>
  SystemJS.import('/js/main.js');
</script>

Что еще более важно, обратите внимание, что node_modules не имеет значения не в обоих случаях, и не должно быть. Если ваш код и конфигурация настроены правильно, SystemJS (как и другие инструменты сборки) упакует все, что вам нужно, без каких-либо дополнительных тегов <script>. Вместо этого вы должны импортировать свои прокладки (и аналогичные) из своего кода где-нибудь. Например, в своем руководстве Webpack (Webpack - еще один инструмент сборки, который выполняет аналогичную роль для SystemJS) команда Angular показывает polyfills.ts, который импортирует их прокладки, тогда они включают файл полифилов в сборку в своей настройке веб-пакета.

Извините, что я не могу предложить более конкретные советы о SystemJS, в частности, но, надеюсь, этого ответа достаточно, чтобы указать вам в правильном направлении.

Ответ 2

Вам либо нужно развернуть node_modules как часть вашего пакета, либо запустить script npm install, чтобы получить пакеты с вашего package.json

Чтобы получить пакеты в вашем файле package.json, сделайте npm install --save package-you-want-to-install

Затем вы можете запустить свой запуск script из пакета json, попробовав script по этой ссылке https://github.com/woloski/nodeonazure-blog/blob/master/articles/startup-task-to-run-npm-in-azure.markdown

Ответ 3

Не используйте system.config.js

Вам нужно сначала связать его. Не загружайте node_modules в Azure. Чтобы связать ссылку ниже, выполните следующие действия.

Как связать приложение Angular для производства

Как только вы соберете папку dist, вы создадите. Вы можете загрузить папку dist в Azure.

Ответ 4

npm установите свои отпечатки на prod env..

npm i --production

Ответ 5

Одна вещь, которую вы можете сделать, - установить пакеты, необходимые на сервере Azure, через панель инструментов Kudu.

Это установит необходимые пакеты для приложения Angular 2 для запуска на сервере Azure.