For the non-rational B-spline curve of degree $p$, its derivative is a $p-1$ degree non-rational curve.
where, the new control points is $Q_i$.
$$Q_i=p \frac{P_{i+1}-P_i}{u_{i+p+1}-u_{i+1}}$$
I think the built-in `f = BSplineFunction[2D-points];  f'` just returns a non-rational curve.

For the rational curve:
$$C^w(u)=\frac{\sum_{i=0}^n N_{i,p}(u)w_iP_i}{\sum_{i=0}^n N_{i,p}(u)w_i}=\frac{A(u)}{w(u)}$$

where, $P_i=\{x_i, y_i\}$(2D curve) or $P_i=\{x_i, y_i,z_i\}$(3D curve). Then

$$\left[{C^w}(u)\right]'=\left[\frac{A(u)}{w(u)}\right]'=\frac{A'(u)w(u)-A(u)w'(u)}{w^2(u)}$$

----

I will write a full answer when I have a laptop. Now I just using a smart-phone.

    BSplineDer[pts_, wgts_, {deg_, knots_}][u_?NumericQ] :=
     Module[{n, coeff, ptsW, newPw, newWgts, newKnots, Au, wu, AuDer, wuDer},
      n = Length@pts - 1;
      coeff = 
       Piecewise[{{deg/(knots[[# + 2 + deg]] - knots[[# + 2]]), 
        knots[[# + 2 + deg]] != knots[[# + 2]]}}] & /@ Range[0, n - 1];
      ptsW = pts wgts;
      (*compute the new ctrl-points,weights and knots*)
      newPw = Differences[ptsW] coeff;
      newWgts = Differences[wgts] coeff;
      newKnots = ArrayPad[knots, -1];
      (*calculate the A(u) and w(u)*)
      Au = BSplineFunction[ptsW, SplineDegree -> deg, SplineKnots -> knots][u];
      wu = BSplineFunction[wgts, SplineDegree -> deg, SplineKnots -> knots][u];
      (*calculate the derivative of A(u) and w(u)*)
      AuDer = BSplineFunction[newPw, SplineDegree -> deg - 1, SplineKnots -> newKnots][u];
      wuDer = BSplineFunction[newWgts, SplineDegree -> deg - 1, SplineKnots -> newKnots][u];
      (*using the NURBS curve derivative formula*)
      (wu AuDer - wuDer Au)/wu^2
     ]

###TEST

    pts = {{1, 1}, {2, 3}, {3, -1}, {4, 1}, {5, 0}};
    wgts = {1, 2, 3, 4, 5};
    knots = {0, 0, 0, 0, 0.5, 1, 1, 1, 1};
    f = BSplineFunction[pts, SplineDegree -> 3, SplineWeights -> {1, 2, 3, 4, 5}]

    Show[
     {ParametricPlot[f[t], {t, 0, 1}],
      Graphics[
       {Red, Dashed, Arrowheads[0.03], 
        Table[Arrow[{f[t], f[t] + BSplineDer[pts, wgts, {3, knots}][t]/7}], {t, 0, 1, 0.1}]}],
      ListPlot[f /@ Range[0, 1, 0.1],
       PlotStyle -> Directive[Black, PointSize[Medium]]]},
     PlotRange -> All, Axes -> False
    ]
![enter image description here][1]




  [1]: https://i.sstatic.net/8yyEs.png