Forum Discussion

Joseph Ackerman's avatar
Joseph Ackerman
Iron Contributor
Jul 06, 2017

Bundling and "externals"

My current project uses jQuery and sp-pnp-js, and I have moved these to a document library in a "cdn" site collection in my tenant (it's not a *real* CDN, I just call it that -- it really is just a document library).  This has worked pretty well so far:

...snip...
"externals": {
    "jquery": "https://tenant.sharepoint.com/sites/CDN/Libraries/jQuery/v3.2.1/jquery.min.js",
    "sp-pnp-js": "https://tenant.sharepoint.com/sites/CDN/Libraries/pnp/v2.0.5/pnp.min.js"
  },
...snip...

My question is related to something I see in a lot of blog posts on the topic - many times I see examples (hello, Waldek Mastykarz) where the following is also in the externals section of config.json, like so:

  "externals": {
    "@microsoft/sp-client-base": "node_modules/@microsoft/sp-client-base/dist/sp-client-base.js",
    "@microsoft/sp-client-preview": "node_modules/@microsoft/sp-client-preview/dist/sp-client-preview.js",
    "@microsoft/sp-lodash-subset": "node_modules/@microsoft/sp-lodash-subset/dist/sp-lodash-subset.js",
    "office-ui-fabric-react": "node_modules/office-ui-fabric-react/dist/office-ui-fabric-react.js",
    "react": "node_modules/react/dist/react.min.js",
    "react-dom": "node_modules/react-dom/dist/react-dom.min.js",
    "react-dom/server": "node_modules/react-dom/dist/react-dom-server.min.js"
  },

Should I be doing this as well? Also, this doesn't really make sense to me; if these files are in a sub-folder of the project itself, how are they "external"? I'd love to know what's actually going on here and whether it is something I need to be aware of for my own solutions.  Thanks.

  • You don't need to do this. What you're looking at is a project created an older version of the SharePoint Framework, where more packages have been listed as external. In the latest version it's not required anymore which is why you're not seeing them anymore.

    • Joseph Ackerman's avatar
      Joseph Ackerman
      Iron Contributor

      Dean_Gross,

       

      Thanks, yeah, I've played with that and got it to work fine.  But given the fine details (limited support for Private CDN, and Public CDN being...well, *public*), that solution is a non-starter for my customer -- they're much more comfortable with their assets continuing to be contained directly within their own SP sites. A dedicated site collection, site and document libraries are serving that function well at the moment.  If the customer comes back to me at a later date worried about performance, I can have the CDN talk with them again.

       

      My question is not about where the assets should be stored -- it's about which ones I should instruct the tool chain to treat as external to the project so I don't end up bundling the same code into multiple web parts which will be running on the same page.  I'd like to lighten the web parts as much as possible to improve page-load performance on the intranet.

      • Dean_Gross's avatar
        Dean_Gross
        Silver Contributor
        "Public" is a poorly choosen word, all that it means is that anyone who has access to the tenant will have access to the resource. If you are not already logged into the tenant then you cannot get to the item in the "public CDN". VesaJuvonen explained this in his demo.
  • You don't need to do this. What you're looking at is a project created an older version of the SharePoint Framework, where more packages have been listed as external. In the latest version it's not required anymore which is why you're not seeing them anymore.

    • Joseph Ackerman's avatar
      Joseph Ackerman
      Iron Contributor

      Thanks, Waldek.  I thought it might be something like that :)

       

      This is the problem with not having FULL/COMPLETE/THOROUGH/CURRENT documentation for the platform.  When we have to rely on trawling the web for posts to get info, it's inevitable that some will be out of date because what's on the internet is pretty much there forever...

       

      Thanks again.