Comment configurer ASP.NET Core + Vue.Js?

j'ai Besoin d'intégrer Vue.js certains ASP.NET Core MVC points de vue. J'ai choisi de Vue.js par rapport à d'autres alternatives parce qu'il semblait être plus simple: -"il suffit de l'ajouter via <script> la balise" ils ont dit. Pas besoin d'apprendre gulp/grunt/webpack/browserify/etc.

Qui s'est avéré être faux. Lors de ma première tentative de gérer les dates, j'ai essayé certaines extensions comme vue-moment ou vue-datetime-picker, extrait de cet officiel organisée liste de choses super liées à la Vue.js mais j'ai heurté un mur ici. Alors que le premier n'est pas obligatoire en utilisant le require() syntaxe js (¿<!--6?), la seconde ne fonctionne pas sans elle. D'autres extensions arrivent à 'use babel' et imports/exports qui est ECMAScript 6 cela doit être compilé. Ainsi, la plupart des vue.js libraries and toolings a en effet besoin d'un compilateur, plus le require() syntaxe et tout ça à partir de la node monde?

Comment dois-je configurer mon projet pour travailler avec ASP.NET Core MVC + Vue.js, dans un de cette façon, je peux développer beaucoup de petites applications de vue en utilisant des plugins de vue (qui peuvent require(stuff))?

39
demandé sur Gerardo Grignoli 2016-09-13 23:57:34

7 réponses

j'étais complètement perdu quand j'ai posé la question ci-dessus. J'ai passé quelques jours et je n'ai toujours pas une image complète. Ce que je suis assez sûr c'est que 2016 est une année difficile pour apprendre le JavaScript

je voulais utiliser la Vue.JS parce que c'est plus simple que les alternatives. Moins de cérémonie, moins de boilerplates, moins de code. C'est marqué comme le Cadre Progressif... La droite! mais seulement à un point. Vue.Js ne résout pas L'écosystème Javascript problème de fragmentation avec les systèmes de construction.

donc, vous devrez choisir un côté: Avez-vous besoin d'un module javascript et d'un système de construction?

Option 1: rester simple: Éviter le Js de modules et de systèmes de construction.

Raisons de suivre ce chemin:

  • Vous n'avez pas beaucoup de jours pour apprendre BEAUCOUP de choses. (la configuration de bundler, gnp+dépendances de package de l'enfer, ES6 trucs
  • Vous ne voulez pas faire un à la fine pointe de L'Application en une seule Page. Intégrant Vue.js à l'intérieur de quelques pages HTML semble assez.
  • HTTP/2 est de plus en plus courant, donc les bundlers comme Webpack ou Browserify fournira moins d'avantages, au moins sur le rendement.
  • eventuellementES6 Modules sera pris en charge directement dans le navigateur, donc nous n'aurons pas besoin de construire quoi que ce soit dernière -javascript en compatible avec les navigateurs -javascript.

Vous gagnez de nombreux jours en ne passant pas de temps à apprendre des choses qui seront probablement obsolètes dans quelques années.

Si vous suivez ce chemin, quelques recommandations:

  • il suffit d'ajouter des bibliothèques js en utilisant le <script> balise.
  • n'utilisez que des bibliothèques Javascript prêtes à l'emploi. Quel que soit le code qui utilise require() ou le préfixe UMD (function (root, factory) { nécessite des modules de configuration (par conséquent, ils ne sont pas prêts pour le navigateur à moins que vous ne configuriez CommonJS). Fichiers Js avec import/export les déclarations sont écrites en ES6 alors évitez - les aussi.
  • utilisez Bower pour télécharger des fichiers libs prêts à l'emploi. Éviter la NGP (ce qui implique la mise en place d'un système de modules).

avertissement: vous ne pourrez pas utiliser advanced Vue.js les caractéristiques de la forme Fichier Unique De Composants ou vue-router, mais c'est ok. Vous devrez faire certaines choses à la main.

Option 2: Apprendre les Modules Javascript + construire des systèmes.

Préparer un quelques jours pour apprendre et pas coder. Je vais expliquer brièvement comment Webpack a travaillé pour moi. Browserify fonctionne aussi, mais je n'ai pas essayé.

je vous recommande de passer un peu de temps à apprendre ce que les Modules JavaScript sont. Puis apprendre à les construire et à les emballer: j'ai utilisé WebPack. Sa documentation n'est pas grande, donc ce qui a fonctionné pour moi était de suivre son tutoriel étape par étape.

à ce point, vous avez peut-être entendu que webpack a aussi un builtin serveur web avec Hot-Module-Reloading. Il s'agit d'un serveur web pour les fichiers statiques à utiliser uniquement pour le développement. Son avantage est que chaque fois que vous éditez un module JS, le navigateur appliquera automatiquement la modification sans rafraîchissement. C'est une fonctionnalité très agréable, mais optionnelle. Le problème: ce serveur web est en concurrence avec notre serveur web (Kestrel). Donc, si vous voulez essayer cette fonctionnalité pendant le développement utilisez le Webpack Asp.Net core Middleware fourni chez Microsoft JavaScriptServices repo . Vous y trouverez les webapplicationbasic template que j'utilise actuellement. Je l'ai disséqué, j'ai enlevé la plupart de ses parties et en essayant de l'utiliser j'ai lentement compris ce que chaque partie était à l'origine.

lorsque vous utilisez webpack vous utiliserez principalement 3 workflows:

  • mode de développement intégré: crée d'énormes fichiers, facile à déboguer. Utilisez-le avec ' watch-mode’ donc chaque fois que vous modifiez un fichier, un une nouvelle version de Webpack est lancée.
  • Build en mode de production: Crée de petits fichiers minifiés. Utile pour " dotnet publier’.
  • utilisation de Webpack-Web-server+Hot-Module-Reload avec Webpack Asp.Net core Middleware alors votre application lancera Webpack en arrière-plan, construira, et regardera les fichiers source pour les changements. La sortie de compilation n'est pas écrite sur le disque et n'est conservée qu'en mémoire et servie via http. JavaScriptServices middleware transmet les requêtes de Kestrel à Webpack-Web-server pour que cela fonctionne.

quelle que soit la configuration webpack que vous utilisez, vous devez inclure ‘vue-loader’ dans votre configuration webpack. Vous pouvez vous inspirer dans le webpack de Vue-modèle simple.

Je n'ai pas couvert tout ce que je voulais, mais ce sujet est trop vaste et je dois revenir au code. Veuillez laisser quelques commentaires.

64
répondu Gerardo Grignoli 2018-01-22 22:47:48

je suis en retard à la fête mais maintenant il y a un modèle disponible pour .net Core que vous pouvez construire avec une seule commande. Sur une fenêtre windows avec .net Core installé il suffit de créer un dossier vide et dans ce dossier exécuter cette commande pour afficher une liste de modèles disponibles

dotnet new

Si vous n'avez pas tous les modèles vous suffit de le lancer pour installer le SPA modèles:

dotnet new --install Microsoft.AspNetCore.SpaTemplates::*

Et ce à l'échafaud une nouvelle Vue de l'app:

dotnet new vue

En millisecondes une nouvelle Vue complète.l'application web js single page est construite avec un noyau de travail .net back end avec des contrôleurs, des vues, etc. C'est brillant. Il suffit d'ouvrir le projet est VS ou VS Code et vous êtes absent.

il y a aussi des gabarits pour Aurelia, Angular, Knockout et React! Vous pouvez les construire tous et comparer comment chacun résout le même problème. L'angulaire fait même pré-rendu côté serveur hors de la boîte!

je sais .Net de Base a un chemin à parcourir, mais il devient de plus en plus impressionnant par le jour!

14
répondu Norbert Norbertson 2017-06-20 19:09:35

tout D'abord, un avertissement: je n'ai pas pu trouver quoi que ce soit qui corresponde vraiment à ce dont j'avais besoin, donc j'ai mis en place une solution à partir de zéro, voir la fin

vous demandez l'inclusion de Vue via le <script> étiquette (dans ce cas, la construction CDN). Cependant,vous mentionnez également L'utilisation de Babel et de la fonctionnalité ES6 modules. Dans ce cas, je recommande D'utiliser Webpack pour l'application côté client, qui compilera votre ES6 avec Babel, vous permettra d'utiliser des modules et des composants, et de travailler avec un modèle! Vous obtenez également le module chaud recharger (éditer votre source et voir les changements dans l'application client en temps réel!) et Webpack regroupera votre SPA dans une application HTML5 statique.

L'officiel de la Vue.js docs point leur propre modèle Webpack.

alors vous exécuter le Webpack serveur de dev et de votre ASP.NET Core application de façon indépendante, si cela convient à vos besoins, mais il existe une meilleure solution qui rend le développement encore plus simplifié:

Microsoft open source JavaScriptServices permet d'exécuter le noeud.js de ASP.NET Core, et ils ont certains middleware Webpack qui intègre le serveur webpack dev dans votre application pendant les constructions de débogage.

ils fournissent des gabarits officiels pour L'angle 2, et même un gabarit étiqueté Vue.js, mais le modèle Vue n'est que le modèle officiel de webpack sans aucune intégration avec .NET; c'est exactement comme le serveur autonome.

Je n'ai pas pu trouver de gabarits ceci pour Vue.js, j'ai fait un échantillon. ASP.NET application de base qui charge le webpack dev middleware avec une Vue.js webpack app. Lorsque le serveur .net Core tourne en mode dev, vous pouvez éditer la source de L'Evi, et les modifications seront reflétées avec des correctifs incrémentiels rapides sans avoir besoin de reconstruire l'application entière. En mode release, .NET Core utilisera la sortie Webpack précompilée. Vous pouvez le trouver sur GitHub:

https://github.com/0xFireball/YetAnotherShrinker Le dépôt relié ci-dessus a une démo d'application complète qui utilise NancyFx, axios, Vue.js, et Vue Matériel, et est une simple raccourcisseur d'URL. Si vous voulez étapes pour une configuration minimale qui peut être facilement ajouté à une application existante, découvrez ce blog de mine.

divulgation obligatoire: j'ai écrit ce billet de blog.

8
répondu n3n7 2017-07-19 17:35:27

Vous pouvez essayer les étapes ci-dessous , ou en cas sur ce simple guide.

  1. configuration du fichier de configuration npm (paquet.json)

voici le paquet npm que j'utiliserai.

{
  "version": "1.0.0",
  "name": "asp.net",
  "private": true,
  "scripts": {
    "prod": "gulp --production",
    "dev": "gulp watch"
  },
  "devDependencies": {
    "gulp": "^3.9.1",
    "laravel-elixir": "^6.0.0-14",
    "laravel-elixir-vue-2": "^0.2.0",
    "laravel-elixir-webpack-official": "^1.0.2",
    "vue": "^2.0.1",
    "vue-resource": "^1.0.3",
    "vuex": "^2.1.1"
  }
}
  1. installez le paquet npm

Ouvrez l'invite de commande et accédez au dossier racine de votre application et installez les paquets npm définis à partir de votre paquet.json utilisant la commande "npm install’ sans citation.

  1. Configuration Gulp

une fois le paquet npm installé, vous pouvez maintenant configurer le fichier gulfp. Vous il faudra ajouter un nouvel élément appelé gulffile ( gulffile).js ). Plus tard, nous créerons la vue js que nous appellerons vueApp.js même avec le code ci-dessous. Le premier argument est que le public le répertoire de sortie et l'autre est le répertoire source pour plus d' détails sur le clic de webpack ici.

var elixir = require('laravel-elixir');



require('laravel-elixir-vue-2');

elixir(function (mix) {
    mix.webpack('vueApp.js', 'wwwroot/js/dist', 'wwwroot/js');
});
  1. Créer la Vue fichier js

Sur votre asp.net web de base de projet d'application explorateur de solutions goto wwwroot et d'ajouter ‘js’ dossier et si elle n'existe pas, alors ajouter encore une nouvelle nom du dossier ‘dist’. Maintenant, une fois la configuration du dossier terminée, ajoutez un nouveau fichier javascript dans le ‘js’ nom du dossier ‘vueApp.js'.

  1. démarrage du codage dans votre fichier vue js

Vous pouvez maintenant commencer à coder, comme pour l'exemple ci-dessous nous seront d'affichage alerte pour indiquer que vue js est en cours d'exécution.

import Vue from 'vue'

new Vue(
    {
        el: '#app',
        data() {
            message:'hello world using vue js on Asp.net core mvc.'
        },
        mounted() {
            console.log(this.message);
        }
    });
  1. Appliquer vue js sur votre rasoir vue ou html

ouvrez votre page de mise en page et enveloppez le contenu de votre étiquette corporelle avec un div et un id d'application. Nous utiliserons app puisque c'est la balise id que nous avons utilisée sur notre exemple de code de l'étape 5. Cette application n'est pas obligatoire et vous pouvez changez sur votre nom désiré. Enfin sur l'application de la vue js de fichier ajouter référence maintenant à la script. Assurez-vous de sortir de l'application div la référence des scripts pour prévenir les erreurs.

<body>

<div id="app">

    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">Project.Payrole</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
                    <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
                </ul>
                @await Html.PartialAsync("_LoginPartial")
            </div>
        </div>
    </nav>
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; 2017 - Project.Payrole</p>
        </footer>
    </div>

</div>

<environment names="Development">
    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
</environment>

<environment names="Staging,Production">
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
            asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
            asp-fallback-test="window.jQuery"
            crossorigin="anonymous"
            integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
    </script>
    <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
            asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
            asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
            crossorigin="anonymous"
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
    </script>
    <script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>

<script src="~/js/dist/vueApp.js" asp-append-version="true"></script>



    @RenderSection("Scripts", required: false)
</body>
  1. Exécuter gulp

maintenant que nous avons configuré la configuration de vue js et l'appliquons à notre razor view nous aurons besoin de lancer gulfp pour exécuter ce que nous avons mis en notre gulffile. Comme à l'étape 2, Allez dans votre dossier racine et ouvrez la commande invite puis exécute la commande ‘npm run dev’ à nouveau sans la citation.

  1. Exécuter

pour la dernière étape, lancez votre asp.net application MVC de base et de vérifier le console de votre navigateur web. Vous devriez être capable de voir maintenant le message nous avons défini à partir de l'étape 5.

(je l'ai écrit le guide sur le blog de référence chaque fois que j'ai peut-être besoin :D)

3
répondu SlowNinja 2017-03-10 03:27:42

Peut-être quelqu'un aura trouvé cette information utile)

voici quelques modèles de démarrage que vous pouvez utiliser pour la configuration rapide d'un projet.

la première offre une solution multi-projets avec une architecture prédéfinie. Ce modèle est plus proche des projets du monde réel que les JavaScriptServices qui ont déjà été mentionnés ici. Il fournit la couche domaine, la couche dépôt et etc. Notez que c'est le générateur de yeoman et il utilise tapuscrit. https://github.com/vue-typed/generator-vue-net-core

Le deuxième, juste de projet sur github et il faut cloner si vous voulez l'utiliser. Ce n'est pas un générateur yeoman et je pense que c'est regrettable, mais j'ai trouvé la structure en ce modèle mieux que dans le premier. En outre, il a beaucoup de belles petites choses comme certains filtres d'exception, que vous, très probablement, fera encore de toute façon )). Et si vous êtes un débutant, ce modèle sera pour vous un aubaine. Ce modèle recommandé sur la page awesome-vue. Voici le lien: https://github.com/mrellipse/toucan

3
répondu Stanislav 2018-01-22 22:47:19

j'ai passé beaucoup de temps à apprendre à utiliser Browserify et Babel pour pouvoir configurer mes propres environnements ES6. Cependant, quand il s'agit de L'utilisation de Vue je suis assez heureux d'aller avec les gabarits par défaut, qui sont mieux accessibles en installant Vue-CLI. Vous pouvez choisir entre Browserify et Webpack, et soit des configurations simples ou complètes avec linting, des tests unitaires et des composants de fichiers uniques en utilisant la version d'exécution seulement.

Ça fonctionne, tout simplement.

0
répondu blues_driven 2017-03-09 10:06:08

cette question est un peu vieille mais..

j'ai un petit exemple de projet Github qui utilise aspx et vue.js , il utilise des fils (ou mnp) que le gestionnaire de package et Webpack.

Il n'est pas .net de base... mais la façon de l'utiliser sera la même... Il pourrait vous aider à démarrer.

l'étrange structure de fichier est parce qu'elle tourne tout sur notre système Sitecore CMS

j'Espère que ça aide.

0
répondu CodeHacker 2017-04-04 06:31:32