PlayNicely.NpmNpx 1.3.3

There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package PlayNicely.NpmNpx --version 1.3.3                
NuGet\Install-Package PlayNicely.NpmNpx -Version 1.3.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PlayNicely.NpmNpx" Version="1.3.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PlayNicely.NpmNpx --version 1.3.3                
#r "nuget: PlayNicely.NpmNpx, 1.3.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install PlayNicely.NpmNpx as a Cake Addin
#addin nuget:?package=PlayNicely.NpmNpx&version=1.3.3

// Install PlayNicely.NpmNpx as a Cake Tool
#tool nuget:?package=PlayNicely.NpmNpx&version=1.3.3                

Play Nicely - npm & npx

NuGet package to inject npm and npx tooling into your project.

The purpose of this project is to support node_modules that handle build time tasks in web/js projects, such as the awesome tailwindcss, Sass, or TypeScript (without having to install these modules globally, although Node.js does need to be installed).

Installation

Simply install this package into your project like any other NuGet dependency.

Install-Package PlayNicely.NpmNpx

Getting Started

The default settings create a package.json if there isn't one already (during build), using npm init -y, in the project root directory (the owning project of this dependency). That @(NpmProject) is the one included in the build.

This project on its own doesn't do anything particularly interesting. The easiest way to utilize it is to use one of its leaf projects for sass or tailwindcss. But if you need to add a npm package for something else, you can and it allows you to call it during the dotnet build process.

An example with tailwindcss

Let's say you want to use tailwindcss in you web project. From a shell:

  1. Install tailwindcss as a dev dependency, and create a base tailwind.config.js.
    npm install -D tailwindcss
    npx tailwindcss init
    
  2. Configure your tailwind environment.
  3. Add a tailwindcss build <Target> to your (csproj) project file. Notice that the target (below) depends on npm-install and runs AfterTargets BeforeBuild. It depends on any node modules being installed and any BeforeBuild processing, before generating the tailwind site.css file.
    <Target Name="tailwind-build"
            DependsOnTargets="npm-install"
            AfterTargets="BeforeBuild">
      <Exec Command="npx tailwind build -i ./src/site.css -o ./wwwroot/css/site.css" />
      <ItemGroup>
    
        <Content Include="wwwroot/css/site.css" Exclude="@(Content)" />
      </ItemGroup>
    </Target>
    

Configuration

The package includes two MSBuild Project files, that are <Import>ed into your project:

  • PlayNicely.NpmNpx.props - contains the most common default properties for node projects, package.json file in the root of the project.
    • NpmRootDirectory - The root of the node project, defaults to the project that is installing this dependency.
    • NpmProject - A default (MSBuild) item NpmProject, this is the package.json file in the root of the dependent project.
  • PlayNicely.NpmNpx.targets - A basic set of (MSBuild) targets:
    • npm-version and npx-version - to check that npm and npx, respectively, are installed and fail the build if they aren't.
    • npm-init - Runs npm init -y for any @(NpmProject) items that have not been initialized with a package.json.
    • npm-install - Runs npm install for any @(NpmProject) items, to ensure node dependencies have been installed locally.

Other properties that effect build:

  • <NpxRequired> - set this to false if your build does not require the npx tool. If this property is false, then the build will not fail if npx is not detected. The default for this property is true.
  • <NpmAutoInit> - set this to false if you want to manually initialize your node project, with npm init. The default for this property is true.

Multiple NpmProject's

The most common scenario is for a web project to contain a single package.json file and node_nodules directory. You can have multiple projects by defining them in you MSBuild (csproj) project file. Each node project must be in it's own directory.

npm init -y for missing package.json files.

If a @(NpmProject) is defined but the package.json has not been created, the build targets will initialize those directories using npm init -y by default. This creates an empty node project with no dependencies (unless the project directory already contains a node_modules directory). This is a convience for the build, but you will still need to add your own npm dependencies using npm install.

It is recommended that you create your package.json files manually and add any dependencies using npm init and npm install, if you don't, the build targets will call npm init -y for each @(NpmProject) that is defined where the package.json does not exist. This auto init of the package.json file can be disabled by setting the build property <NpmAutoInit>false</NpmAutoInit>.

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

  • .NETStandard 1.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on PlayNicely.NpmNpx:

Package Downloads
PlayNicely.Sass

An MSBuild targets package that adds support for the sass transpiler in a .NET project.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.3.4-beta-322 81 9/28/2024
1.3.4-beta-297 80 9/21/2024
1.3.4-beta-295 77 9/21/2024
1.3.4-beta-289 108 9/14/2024
1.3.4-beta-281 74 9/1/2024
1.3.3 98 6/1/2024
1.3.3-beta-274 87 7/12/2024
1.3.3-beta-266 74 6/1/2024
1.3.2 102 6/1/2024
1.3.2-beta-262 96 6/1/2024
1.3.2-beta-260 87 6/1/2024
1.3.2-beta-253 79 6/1/2024
1.3.2-beta-249 102 5/31/2024
1.3.2-beta-239 88 5/22/2024
1.3.2-beta-233 88 5/12/2024
1.3.2-beta-213 100 5/7/2024
1.3.2-beta-207 83 4/28/2024
1.3.2-beta-200 155 4/14/2024
1.3.1 337 4/11/2024
1.3.1-beta-191 134 4/11/2024
1.3.1-beta-177 116 4/8/2024
1.3.0 939 3/12/2024
1.3.0-beta-169 123 3/22/2024
1.3.0-beta-157 105 3/13/2024
1.3.0-beta-155 111 3/12/2024
1.2.1.93-prerelease-2024011... 150 1/11/2024
1.2.1.91-prerelease-2024011... 122 1/11/2024
1.2.1 160 1/24/2024
1.2.1-prerelease-20240124-1... 100 1/24/2024
1.2.1-prerelease-20240118-1... 98 1/18/2024
1.2.0.82 107 1/10/2024
1.2.0.81-prerelease-2024011... 82 1/10/2024
1.2.0.76-prerelease-2024011... 108 1/10/2024
1.1.0.74 161 1/8/2024
1.1.0.73-prerelease-2024010... 110 1/8/2024
1.1.0.72-prerelease-2024010... 101 1/8/2024
1.0.3.70 143 1/8/2024
1.0.3.69-prerelease-2024010... 95 1/8/2024
1.0.3.68-prerelease-2024010... 123 1/8/2024
1.0.3.67-prerelease-2024010... 92 1/8/2024
1.0.3.64-prerelease-2024010... 121 1/5/2024
1.0.3.62-prerelease-2024010... 116 1/5/2024
1.0.3.61-prerelease-2024010... 142 1/5/2024
1.0.3.57-prerelease-2024010... 127 1/3/2024
1.0.3.56-prerelease-2024010... 119 1/3/2024
1.0.3.55 180 12/28/2023
1.0.3.54-prerelease-2023122... 112 12/28/2023
1.0.2.51 157 12/28/2023
1.0.2.50-prerelease-2023122... 125 12/28/2023