<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      Django項目引入NPM和gulp管理前端資源

      前言

      之前寫了一篇《Asp-Net-Core開發筆記:使用NPM和gulp管理前端靜態文件》,現在又來用Django開發項目了,之前我搞了一個Django的快速開發腳手架「DjangoStarter」,正好給升級一下~

      關于npm和gulp我就不多重復了,之前那篇文章都寫了,直接上操作

      安裝依賴

      安裝依賴的操作跟上一篇文章是一樣的,不過我這里直接提供package.json文件,復制到項目根目錄里面,然后直接執行命令安裝依賴。

      package.json文件如下:

      {
        "name": "django_starter",
        "version": "1.0.0",
        "description": "",
        "main": "index.js",
        "repository": "https://github.com/Deali-Axy/DjangoStarter",
        "author": "DealiAxy",
        "license": "Apache License 2.0",
        "dependencies": {
          "bootstrap": "^5.1.3",
        },
        "devDependencies": {
          "gulp": "^4.0.2",
          "gulp-changed": "^4.0.3",
          "gulp-clean-css": "^4.3.0",
          "gulp-concat": "^2.6.1",
          "gulp-rename": "^2.0.0",
          "gulp-uglify": "^3.0.2",
          "rimraf": "^3.0.2"
        }
      }
      

      執行命令:

      npm install
      # 或者有安裝yarn的話可以
      yarn
      

      gulp配置

      在項目根目錄下創建gulpfile.js文件

      直接上配置文件:

      /// <binding BeforeBuild='min' Clean='clean' ProjectOpened='auto' />
      "use strict";
      
      //加載使用到的 gulp 插件
      const gulp = require("gulp"),
          rimraf = require("rimraf"),
          concat = require("gulp-concat"),
          cssmin = require("gulp-clean-css"),
          rename = require("gulp-rename"),
          uglify = require("gulp-uglify"),
          changed = require("gulp-changed");
      
      
      //定義 static 下的各文件存放路徑
      const paths = {
          root: "./static/",
          css: './static/css/',
          js: './static/js/',
          lib: './static/lib/'
      };
      
      //css
      paths.cssDist = paths.css + "**/*.css";//匹配所有 css 的文件所在路徑
      paths.minCssDist = paths.css + "**/*.min.css";//匹配所有 css 對應壓縮后的文件所在路徑
      paths.concatCssDist = paths.css + "app.min.css";//將所有的 css 壓縮到一個 css 文件后的路徑
      
      //js
      paths.jsDist = paths.js + "**/*.js";//匹配所有 js 的文件所在路徑
      paths.minJsDist = paths.js + "**/*.min.js";//匹配所有 js 對應壓縮后的文件所在路徑
      paths.concatJsDist = paths.js + "app.min.js";//將所有的 js 壓縮到一個 js 文件后的路徑
      
      
      //使用 npm 下載的前端組件包
      const libs = [
          {name: "bootstrap", dist: "./node_modules/bootstrap/dist/**/*.*"},
      ];
      
      // 使用 npm 下載的前端組件,自定義存放位置
      const customLibs = [
          // {name: 'font-awesome', dist: './node_modules/@fortawesome/fontawesome-free/**/*.*'},
      ]
      
      //清除壓縮后的文件
      gulp.task("clean:css", done => rimraf(paths.minCssDist, done));
      gulp.task("clean:js", done => rimraf(paths.minJsDist, done));
      
      gulp.task("clean", gulp.series(["clean:js", "clean:css"]));
      
      //移動 npm 下載的前端組件包到 wwwroot 路徑下
      gulp.task("move:dist", done => {
          libs.forEach(item => {
              gulp.src(item.dist)
                  .pipe(gulp.dest(paths.lib + item.name + "/dist"));
          });
          done()
      })
      gulp.task("move:custom", done => {
          customLibs.forEach(item => {
              gulp.src(item.dist)
                  .pipe(gulp.dest(paths.lib + item.name))
          })
          done()
      })
      
      //每一個 css 文件壓縮到對應的 min.css
      gulp.task("min:css", () => {
          return gulp.src([paths.cssDist, "!" + paths.minCssDist], {base: "."})
              .pipe(rename({suffix: '.min'}))
              .pipe(changed('.'))
              .pipe(cssmin())
              .pipe(gulp.dest('.'));
      });
      
      //將所有的 css 文件合并打包壓縮到 app.min.css 中
      gulp.task("concat:css", () => {
          return gulp.src([paths.cssDist, "!" + paths.minCssDist], {base: "."})
              .pipe(concat(paths.concatCssDist))
              .pipe(changed('.'))
              .pipe(cssmin())
              .pipe(gulp.dest("."));
      });
      
      //每一個 js 文件壓縮到對應的 min.js
      gulp.task("min:js", () => {
          return gulp.src([paths.jsDist, "!" + paths.minJsDist], {base: "."})
              .pipe(rename({suffix: '.min'}))
              .pipe(changed('.'))
              .pipe(uglify())
              .pipe(gulp.dest('.'));
      });
      
      //將所有的 js 文件合并打包壓縮到 app.min.js 中
      gulp.task("concat:js", () => {
          return gulp.src([paths.jsDist, "!" + paths.minJsDist], {base: "."})
              .pipe(concat(paths.concatJsDist))
              .pipe(changed('.'))
              .pipe(uglify())
              .pipe(gulp.dest("."));
      });
      
      
      gulp.task('move', gulp.series(['move:dist', 'move:custom']))
      gulp.task("min", gulp.series(["min:js", "min:css"]))
      gulp.task("concat", gulp.series(["concat:js", "concat:css"]))
      
      
      //監聽文件變化后自動執行
      gulp.task("auto", () => {
          gulp.watch(paths.css, gulp.series(["min:css", "concat:css"]));
          gulp.watch(paths.js, gulp.series(["min:js", "concat:js"]));
      });
      

      無腦復制粘貼就行,真正使用的時候,只需要關注這兩段代碼

      //使用 npm 下載的前端組件包
      const libs = [
          {name: "bootstrap", dist: "./node_modules/bootstrap/dist/**/*.*"},
      ];
      
      // 使用 npm 下載的前端組件,自定義存放位置
      const customLibs = [
          // {name: 'font-awesome', dist: './node_modules/@fortawesome/fontawesome-free/**/*.*'},
      ]
      

      第一段是針對比較規范的npm包,資源文件都在dist目錄下的,配置規則就比較簡單,原樣復制到我們項目的/static/lib目錄下就行。(一般比較新的npm包都是這種結構)

      第二段是針對不按規范的npm包,按照習慣,我們把它包下的css和js文件分開放到/static/lib目錄下,當然具體怎么放可以自己決定,這些規則配置很自由的。

      舉個例子:

      const customLibs = [
          {name: 'example-lib/css', dist: './node_modules/example-lib/a/b/*.css'},
          {name: 'example-lib/js', dist: './node_modules/example-lib/a/c/*.js'},
      ]
      

      這樣就可以把example-lib包里面,a/b目錄下的css文件,和a/c目錄下的js文件,分別復制到我們項目目錄的/static/lib/example-lib/css/static/lib/example-lib/js目錄,到時我們項目中引用會比較方便。

      執行gulp任務

      配置完了之后,直接執行這個命令就行:

      gulp move
      

      之前的gulp配置里還配了很多其他任務,不過感覺必要性不大,畢竟我們這是后端項目,只用一個move命令就行了

      關于其他的命令可以看上一篇有具體講到。

      在項目中引用

      這部分其實不在本文范疇,不過既然提到就寫一下吧。

      在模板文件中,首先加載static標簽,在模板代碼的開頭寫上:

      {% load static %}
      

      然后需要引用靜態文件的地方:

      <link ref="stylesheet" href="{% static 'lib/bootstrap/dist/css/bootstrap.css' %}">
      

      因為我們之前配置gulp的時候,把所有npm包都復制到了/static/lib目錄下,所以引用的時候是lib/開頭。

      posted @ 2022-04-02 23:08  程序設計實驗室  閱讀(673)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲夂夂婷婷色拍ww47| 亚洲成人av一区免费看| 99国产精品自在自在久久| √天堂中文www官网在线| 国产乱码精品一区二区三上| 韩国免费a级毛片久久| 亚洲va久久久噜噜噜久久狠狠| 林口县| 我国产码在线观看av哈哈哈网站| 欧美成人免费全部| 免费无码又爽又刺激网站直播| 内射无套内射国产精品视频| 夜夜添狠狠添高潮出水| 99久久精品久久久久久婷婷| 麻豆久久天天躁夜夜狠狠躁| 少妇被多人c夜夜爽爽av| 免费久久人人爽人人爽AV| 98日韩精品人妻一二区| 视频一区视频二区视频三| 深夜福利啪啪片| 成全高清在线播放电视剧| 日本熟妇XXXX潮喷视频| 韩国美女福利视频一区二区| 天天爽夜夜爱| 亚洲性夜夜天天天| 日韩熟女乱综合一区二区| 庆元县| 精品国产丝袜自在线拍国语| 欧美熟妇xxxxx欧美老妇不卡 | 亚洲av激情一区二区| 精品人妻系列无码天堂| 国产AV福利第一精品| 少妇午夜福利一区二区三区| 久久香蕉国产线熟妇人妻| 国产精品亚洲av三区色| 国产精品美女久久久久久麻豆| 亚洲免费成人av一区| 国产精自产拍久久久久久蜜| 国产sm重味一区二区三区| 樱桃视频影院在线播放| 92久久精品一区二区|