如何为.Net Core 2.0 MVC项目将Bower迁移到NPM或纱线

如何为.Net Core 2.0 MVC项目将Bower迁移到NPM或纱线,npm,.net-core,asp.net-core-mvc,bower,Npm,.net Core,Asp.net Core Mvc,Bower,我的项目是.NET核心MVC,在那里我使用Bower来管理引导、jQuery等。现在Bower要离开了,我如何按照Bower的建议将它们迁移到NPM或Thread/Webpack?好的,经过几次研究,我找到了一种适合我的方法。这是我的步骤 通过NPM安装gulp(在package.json中添加以下条目) 然后还要添加其他包开发依赖项(因为我们需要离开bower)。差不多 "bootstrap": "3.3.7", "jquery": "3.2.1", "jquery-valid

我的项目是.NET核心MVC,在那里我使用Bower来管理引导、jQuery等。现在Bower要离开了,我如何按照Bower的建议将它们迁移到NPM或Thread/Webpack?

好的,经过几次研究,我找到了一种适合我的方法。这是我的步骤

通过NPM安装gulp(在package.json中添加以下条目)

然后还要添加其他包开发依赖项(因为我们需要离开bower)。差不多

"bootstrap": "3.3.7",
    "jquery": "3.2.1",
    "jquery-validation": "1.17.0",
    "jquery-validation-unobtrusive": "3.2.6",
     "fontawesome": "4.7.2"
现在NPM将把所有包下载到项目根文件夹下的node_模块-您可以通过导航到windows文件夹浏览器或选择在VS中显示所有文件来查看它们

现在,下一步是在gulp task runner中设置任务。为此,请直接从web项目下的“添加新项”中添加gulpfile.js。一旦文件添加,我们必须定义将在构建时运行的gulptaks

下面是一个示例文件,它执行3个任务—将包从节点模块复制到wwwroot/lib/_应用程序,并清理/缩小css和js文件。所有任务都已配置为作为生成过程运行,该过程在VS task runner下管理

/// <binding BeforeBuild='clean, clean:css, clean:js, min, min:css, min:js, copy-assets' Clean='clean, min:js, clean:css, copy-assets' />
"use strict";

var _ = require('lodash'),
    gulp = require("gulp"),
    rimraf = require("rimraf"),
    concat = require("gulp-concat"),
    cssmin = require("gulp-cssmin"),
    uglify = require("gulp-uglify");

var paths = {
    webroot: "./wwwroot/"
};
gulp.task('copy-assets', function () {
    var assets = {
        js: [
            './node_modules/bootstrap/dist/js/bootstrap.js',
            './node_modules/jquery/dist/jquery.min.js',
            './node_modules/jquery/dist/jquery.js',
            './node_modules/jquery-validation/dist/jquery.validate.min.js',
           './node_modules/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js'


        ],
        css: ['./node_modules/bootstrap/dist/css/bootstrap.css']
    };
    _(assets).forEach(function (assets, type) {
        gulp.src(assets).pipe(gulp.dest("./wwwroot/lib/_app/" + type));
    });
});
//gulp.task("copy-assets");



paths.js = paths.webroot + "js/**/*.js";
paths.minJs = paths.webroot + "js/**/*.min.js";
paths.css = paths.webroot + "css/**/*.css";
paths.minCss = paths.webroot + "css/**/*.min.css";
paths.concatJsDest = paths.webroot + "js/site.min.js";
paths.concatCssDest = paths.webroot + "css/site.min.css";

gulp.task("clean:js", function (cb) {
    rimraf(paths.concatJsDest, cb);
});

gulp.task("clean:css", function (cb) {
    rimraf(paths.concatCssDest, cb);
});

gulp.task("clean", ["clean:js", "clean:css"]);

gulp.task("min:js", function () {
    return gulp.src([paths.js, "!" + paths.minJs], { base: "." })
        .pipe(concat(paths.concatJsDest))
        .pipe(uglify())
        .pipe(gulp.dest("."));
});

gulp.task("min:css", function () {
    return gulp.src([paths.css, "!" + paths.minCss])
        .pipe(concat(paths.concatCssDest))
        .pipe(cssmin())
        .pipe(gulp.dest("."));
});

gulp.task("min", ["min:js", "min:css"]);
//
“严格使用”;
var=要求('lodash'),
吞咽=需要(“吞咽”),
rimraf=要求(“rimraf”),
concat=需要(“吞咽concat”),
cssmin=需要(“吞咽cssmin”),
丑陋=需要(“吞咽丑陋”);
变量路径={
webroot:“./wwwroot/”
};
吞咽任务('复制资产',函数(){
var资产={
js:[
“./node_modules/bootstrap/dist/js/bootstrap.js”,
“./node_modules/jquery/dist/jquery.min.js”,
“./node_modules/jquery/dist/jquery.js”,
“./node_modules/jquery validation/dist/jquery.validate.min.js”,
“./node_modules/jquery validation unobtrusive/jquery.validate.unobtrusive.js”
],
css:['./node_modules/bootstrap/dist/css/bootstrap.css']
};
_(资产).forEach(功能(资产,类型){
gulp.src(assets).pipe(gulp.dest(“./wwwroot/lib/_app/”+type));
});
});
//吞咽任务(“复制资产”);
path.js=path.webroot+“js/***.js”;
path.minJs=path.webroot+“js/***.min.js”;
path.css=path.webroot+“css/***.css”;
path.minCss=path.webroot+“css/***.min.css”;
path.concatJsDest=path.webroot+“js/site.min.js”;
path.concatCssDest=path.webroot+“css/site.min.css”;
任务(“clean:js”,函数(cb){
rimraf(path.concatJsDest,cb);
});
任务(“清理:css”,函数(cb){
rimraf(paths.concatCssDest,cb);
});
任务(“clean”,“clean:js”,“clean:css”);
任务(“min:js”,函数(){
return gulp.src([path.js,“!”+path.minJs],{base:“.”)
.pipe(concat(path.concatJsDest))
.管道(丑()
.管道(大口目的地(“.”);
});
任务(“min:css”,函数(){
return gulp.src([path.css,!”+path.minCss])
.pipe(concat(path.concatCssDest))
.pipe(cssmin())
.管道(大口目的地(“.”);
});
吞咽任务(“min”,“min:js”,“min:css”);
当在VS上本地工作时,这很好。但是我们需要配置csproj,以表明它可以在VSTS构建过程中工作。这将通过在web.csproj中添加以下配置来完成

<Target Name="buildName" BeforeTargets="Build">
        <Exec Command="npm install" />
    <Exec Command="gulp clean" />
    <Exec Command="gulp copy-assets" />
    <Exec Command="gulp min" />
    </Target>

现在,在构建过程中,所有必要的包都将复制到wwwroot/lib/_应用程序下,您可以将css/js引用指向那里,如下面的_Layout.cshtml中所示

<link href="~/lib/_app/css/bootstrap.css" rel="stylesheet" />

好的,经过几次研究,我找到了一种适合我的方法。这是我的步骤

通过NPM安装gulp(在package.json中添加以下条目)

然后还要添加其他包开发依赖项(因为我们需要离开bower)。差不多

"bootstrap": "3.3.7",
    "jquery": "3.2.1",
    "jquery-validation": "1.17.0",
    "jquery-validation-unobtrusive": "3.2.6",
     "fontawesome": "4.7.2"
现在NPM将把所有包下载到项目根文件夹下的node_模块-您可以通过导航到windows文件夹浏览器或选择在VS中显示所有文件来查看它们

现在,下一步是在gulp task runner中设置任务。为此,请直接从web项目下的“添加新项”中添加gulpfile.js。一旦文件添加,我们必须定义将在构建时运行的gulptaks

下面是一个示例文件,它执行3个任务—将包从节点模块复制到wwwroot/lib/_应用程序,并清理/缩小css和js文件。所有任务都已配置为作为生成过程运行,该过程在VS task runner下管理

/// <binding BeforeBuild='clean, clean:css, clean:js, min, min:css, min:js, copy-assets' Clean='clean, min:js, clean:css, copy-assets' />
"use strict";

var _ = require('lodash'),
    gulp = require("gulp"),
    rimraf = require("rimraf"),
    concat = require("gulp-concat"),
    cssmin = require("gulp-cssmin"),
    uglify = require("gulp-uglify");

var paths = {
    webroot: "./wwwroot/"
};
gulp.task('copy-assets', function () {
    var assets = {
        js: [
            './node_modules/bootstrap/dist/js/bootstrap.js',
            './node_modules/jquery/dist/jquery.min.js',
            './node_modules/jquery/dist/jquery.js',
            './node_modules/jquery-validation/dist/jquery.validate.min.js',
           './node_modules/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js'


        ],
        css: ['./node_modules/bootstrap/dist/css/bootstrap.css']
    };
    _(assets).forEach(function (assets, type) {
        gulp.src(assets).pipe(gulp.dest("./wwwroot/lib/_app/" + type));
    });
});
//gulp.task("copy-assets");



paths.js = paths.webroot + "js/**/*.js";
paths.minJs = paths.webroot + "js/**/*.min.js";
paths.css = paths.webroot + "css/**/*.css";
paths.minCss = paths.webroot + "css/**/*.min.css";
paths.concatJsDest = paths.webroot + "js/site.min.js";
paths.concatCssDest = paths.webroot + "css/site.min.css";

gulp.task("clean:js", function (cb) {
    rimraf(paths.concatJsDest, cb);
});

gulp.task("clean:css", function (cb) {
    rimraf(paths.concatCssDest, cb);
});

gulp.task("clean", ["clean:js", "clean:css"]);

gulp.task("min:js", function () {
    return gulp.src([paths.js, "!" + paths.minJs], { base: "." })
        .pipe(concat(paths.concatJsDest))
        .pipe(uglify())
        .pipe(gulp.dest("."));
});

gulp.task("min:css", function () {
    return gulp.src([paths.css, "!" + paths.minCss])
        .pipe(concat(paths.concatCssDest))
        .pipe(cssmin())
        .pipe(gulp.dest("."));
});

gulp.task("min", ["min:js", "min:css"]);
//
“严格使用”;
var=要求('lodash'),
吞咽=需要(“吞咽”),
rimraf=要求(“rimraf”),
concat=需要(“吞咽concat”),
cssmin=需要(“吞咽cssmin”),
丑陋=需要(“吞咽丑陋”);
变量路径={
webroot:“./wwwroot/”
};
吞咽任务('复制资产',函数(){
var资产={
js:[
“./node_modules/bootstrap/dist/js/bootstrap.js”,
“./node_modules/jquery/dist/jquery.min.js”,
“./node_modules/jquery/dist/jquery.js”,
“./node_modules/jquery validation/dist/jquery.validate.min.js”,
“./node_modules/jquery validation unobtrusive/jquery.validate.unobtrusive.js”
],
css:['./node_modules/bootstrap/dist/css/bootstrap.css']
};
_(资产).forEach(功能(资产,类型){
gulp.src(assets).pipe(gulp.dest(“./wwwroot/lib/_app/”+type));
});
});
//吞咽任务(“复制资产”);
path.js=path.webroot+“js/***.js”;
path.minJs=path.webroot+“js/***.min.js”;
path.css=path.webroot+“css/***.css”;
path.minCss=path.webroot+“css/***.min.css”;
path.concatJsDest=path.webroot+“js/site.min.js”;
path.concatCssDest=path.webroot+“css/site.min.css”;
任务(“clean:js”,函数(cb){
rimraf(path.concatJsDest,cb);
});
任务(“清理:css”,函数(cb){
rimraf(paths.concatCssDest,cb);
});
任务(“clean”,“clean:js”,“clean:css”);
任务(“min:js”,函数(){
return gulp.src([path.js,“!”+path.minJs],{base:“.”)
.pipe(concat(path.concatJsDest))
.管道(丑()
.管道(大口目的地(“.”);
});
任务(“min:css”,函数(){
返回gulp.src([path.css,!”+path.minCs