Не удается найти 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.