0.0.465 • Published 2 months ago

node-backpack v0.0.465

Weekly downloads
-
License
Apache-2.0
Repository
-
Last release
2 months ago

node-backpack

You can use this tool to help create bundled packages with minimal dependencies and appropriate license attributions.

Why

When shipping nodejs applications, there is currently no easy way to ensure your users are consuming the exact dependency closure your package was tested against.

This is because many libraries define their dependencies with a range, rather than a fixed version. NPM has provided an install time lock file called shrinkwrap to help mitigate this, however, this file is only respected by NPM itself, and not by other package managers such as Yarn.

What

This package wires up several popular tools to offer a simpler entrypoint for creating self-contained nodejs packages.

The resulting packages are still npm installable packages, but you can use this tool to replace the entrypoints you specify with a bundled version of them, embedding their dependencies inline. Note that embedding dependencies means you are effectively redistributing third-party software. This could have licensing implications, and it is your responsibility to provide proper and typically requires proper attribution of the bundled dependencies, while validating their licenses allow such redistribution.

You can use this tool to help achieve the following tasks:

  • Bundle the entrypoints inside the package.

    Currently done with esbuild, but is subject to change.

  • Validate and create THIRD_PARTY_LICENCES file with third-party attributions for packages with declared licensing information.

    Currently done with license-checker, but is subject to change.

  • Detect circular imports that are exhibited in your package, or in your dependency closure.

    Currently done with madge, but is subject to change. This is necessary because circular imports mess up the declaration order of types in the bundled file.

Disclaimer

Features of this package rely on the dependencies' declared licensing information, and the fulsomeness of the generated attribution is dependent on the dependencies’ declarations. This tool is not a substitute for your code attribution processes, but you can use it to help streamline attribution items for dependencies that have license declarations. The user of this package remains responsible for complying to their dependencies' licensing requirements, including any attribution obligations.

We strongly recommend that you check all of your code into source control, and follow your ordinary code attribution processes.

Alternative Approaches

We considered two other alternatives before eventually going down this route:

Bundled Dependencies

Aside from a shrinkwrap file, NPM also offers a feature called bundledDependencies to vendor in your dependencies inside the node_modules directory of your package.

See bundledDependencies

While this approach seems to be supported across all package managers, that won't be the case for Yarn 2.x and above, or more concretely, for the Plug'n'Play feature.

See dont use bundled dependencies

Static Binaries

Another option would have been to produce platform specific static binaries that embed both dependencies as well as a node runtime.

This approach is valid, but really depends on the use case. For example if you need your package to still be installable by npm, it doesn't really fit. Also, it's not relevant for libraries, only CLI applications.

How

Run the tool from the root directory of your package.

$ node-backpack --help
Usage: node-backpack COMMAND

Commands:
  node-backpack validate  Validate the package is ready for bundling
  node-backpack write     Write the bundled version of the project to a temp
                        directory
  node-backpack pack      Write the bundle and create the tarball

Options:
  --entrypoint       List of entrypoints to bundle                       [array]
  --external         Packages in this list will be excluded from the bundle and
                     added as dependencies (example: fsevents:optional)
                                                           [array] [default: []]
  --allowed-license  List of valid licenses                [array] [default: []]
  --resource         List of resources that need to be explicitly copied to the
                     bundle (example:
                     node_modules/proxy-agent/contextify.js:bin/contextify.js)
                                                           [array] [default: []]
  --dont-attribute   Dependencies matching this regular expressions wont be
                     added to the notice file                           [string]
  --test             Validation command to sanity test the bundle after its
                     created                                            [string]
  --help             Show help                                         [boolean]
  --version          Show version number                               [boolean]

You can also use the programmatic access:

import { Bundle } from 'node-backpack';

const bundle = new Bundle({
  packageDir: process.cwd(),
  allowedLicenses: ['Apache-2.0', 'MIT'],
});

bundle.pack();

Integrate with your build process

We recommend to integrate this tool in the following way:

  1. Add a node-backpack validate command as a post compile step.
  2. Set your packaging command to node-backpack pack.

This way, you can validate local dev builds not to break any functionality needed for bundling. In addition, developers can run node-backpack validate --fix to automatically fix any (fixable) violations and commit that to source control.

For example, if a dependency is added but the attribution file has not been re-generated, you can use node-backpack validate to catch this, and regenerate it with node-backpack validate --fix.

Take into account

By default, the tool will use the main directive of the package.json as the entrypoint. This will help you ensure that all top level exports of the package are preserved.

Deep imports such as const plugins = require('your-package/lib/plugins') are considered private and should not be used by your consumers. However, if you absolutely have to preserve those as well, you should pass custom multiple entry-points for each deep import. Note that this will balloon up the package size significantly.

If you are bundling a CLI application that also has top level exports, we suggest to extract the CLI functionality into a function, and add this function as an export to index.js.

See aws-cdk as an example.

Security

See CONTRIBUTING for more information.

License

This project is licensed under the Apache-2.0 License.

0.0.465

2 months ago

0.0.464

3 months ago

0.0.463

3 months ago

0.0.462

3 months ago

0.0.461

3 months ago

0.0.460

3 months ago

0.0.459

3 months ago

0.0.458

3 months ago

0.0.457

3 months ago

0.0.456

3 months ago

0.0.455

3 months ago

0.0.454

4 months ago

0.0.453

4 months ago

0.0.452

4 months ago

0.0.451

4 months ago

0.0.450

5 months ago

0.0.449

5 months ago

0.0.448

5 months ago

0.0.436

6 months ago

0.0.435

6 months ago

0.0.439

6 months ago

0.0.438

6 months ago

0.0.437

6 months ago

0.0.447

5 months ago

0.0.446

5 months ago

0.0.445

5 months ago

0.0.444

5 months ago

0.0.443

5 months ago

0.0.442

5 months ago

0.0.441

5 months ago

0.0.440

6 months ago

0.0.434

10 months ago

0.0.433

10 months ago

0.0.432

10 months ago

0.0.431

10 months ago

0.0.430

10 months ago

0.0.403

11 months ago

0.0.402

11 months ago

0.0.401

11 months ago

0.0.400

11 months ago

0.0.407

11 months ago

0.0.406

11 months ago

0.0.405

11 months ago

0.0.404

11 months ago

0.0.414

11 months ago

0.0.413

11 months ago

0.0.412

11 months ago

0.0.411

11 months ago

0.0.418

11 months ago

0.0.417

11 months ago

0.0.416

11 months ago

0.0.415

11 months ago

0.0.410

11 months ago

0.0.409

11 months ago

0.0.408

11 months ago

0.0.425

10 months ago

0.0.424

10 months ago

0.0.423

10 months ago

0.0.422

10 months ago

0.0.429

10 months ago

0.0.428

10 months ago

0.0.427

10 months ago

0.0.426

10 months ago

0.0.421

10 months ago

0.0.420

10 months ago

0.0.419

11 months ago

0.0.395

11 months ago

0.0.394

11 months ago

0.0.393

11 months ago

0.0.392

11 months ago

0.0.399

11 months ago

0.0.398

11 months ago

0.0.397

11 months ago

0.0.396

11 months ago

0.0.391

11 months ago

0.0.390

11 months ago

0.0.389

11 months ago

0.0.384

12 months ago

0.0.383

12 months ago

0.0.382

12 months ago

0.0.381

12 months ago

0.0.388

11 months ago

0.0.387

12 months ago

0.0.386

12 months ago

0.0.385

12 months ago

0.0.348

1 year ago

0.0.347

1 year ago

0.0.346

1 year ago

0.0.349

1 year ago

0.0.359

1 year ago

0.0.358

1 year ago

0.0.357

1 year ago

0.0.356

1 year ago

0.0.351

1 year ago

0.0.350

1 year ago

0.0.355

1 year ago

0.0.354

1 year ago

0.0.353

1 year ago

0.0.352

1 year ago

0.0.369

12 months ago

0.0.368

12 months ago

0.0.367

1 year ago

0.0.362

1 year ago

0.0.361

1 year ago

0.0.360

1 year ago

0.0.366

1 year ago

0.0.365

1 year ago

0.0.364

1 year ago

0.0.363

1 year ago

0.0.379

12 months ago

0.0.378

12 months ago

0.0.373

12 months ago

0.0.372

12 months ago

0.0.371

12 months ago

0.0.370

12 months ago

0.0.377

12 months ago

0.0.376

12 months ago

0.0.375

12 months ago

0.0.374

12 months ago

0.0.380

12 months ago

0.0.315

1 year ago

0.0.314

1 year ago

0.0.313

1 year ago

0.0.312

1 year ago

0.0.319

1 year ago

0.0.318

1 year ago

0.0.317

1 year ago

0.0.316

1 year ago

0.0.311

1 year ago

0.0.310

1 year ago

0.0.309

1 year ago

0.0.326

1 year ago

0.0.325

1 year ago

0.0.324

1 year ago

0.0.323

1 year ago

0.0.329

1 year ago

0.0.328

1 year ago

0.0.327

1 year ago

0.0.322

1 year ago

0.0.321

1 year ago

0.0.320

1 year ago

0.0.337

1 year ago

0.0.336

1 year ago

0.0.335

1 year ago

0.0.334

1 year ago

0.0.339

1 year ago

0.0.338

1 year ago

0.0.333

1 year ago

0.0.332

1 year ago

0.0.331

1 year ago

0.0.330

1 year ago

0.0.345

1 year ago

0.0.340

1 year ago

0.0.344

1 year ago

0.0.343

1 year ago

0.0.342

1 year ago

0.0.341

1 year ago

0.0.304

1 year ago

0.0.303

1 year ago

0.0.302

1 year ago

0.0.301

1 year ago

0.0.308

1 year ago

0.0.307

1 year ago

0.0.306

1 year ago

0.0.305

1 year ago

0.0.300

1 year ago

0.0.279

1 year ago

0.0.274

1 year ago

0.0.273

1 year ago

0.0.272

1 year ago

0.0.271

1 year ago

0.0.278

1 year ago

0.0.277

1 year ago

0.0.276

1 year ago

0.0.275

1 year ago

0.0.270

1 year ago

0.0.285

1 year ago

0.0.284

1 year ago

0.0.283

1 year ago

0.0.282

1 year ago

0.0.289

1 year ago

0.0.288

1 year ago

0.0.287

1 year ago

0.0.286

1 year ago

0.0.281

1 year ago

0.0.280

1 year ago

0.0.296

1 year ago

0.0.295

1 year ago

0.0.294

1 year ago

0.0.293

1 year ago

0.0.299

1 year ago

0.0.298

1 year ago

0.0.297

1 year ago

0.0.292

1 year ago

0.0.291

1 year ago

0.0.290

1 year ago

0.0.259

1 year ago

0.0.258

1 year ago

0.0.257

1 year ago

0.0.256

1 year ago

0.0.255

1 year ago

0.0.269

1 year ago

0.0.268

1 year ago

0.0.263

1 year ago

0.0.262

1 year ago

0.0.261

1 year ago

0.0.260

1 year ago

0.0.267

1 year ago

0.0.266

1 year ago

0.0.265

1 year ago

0.0.264

1 year ago

0.0.205

1 year ago

0.0.204

1 year ago

0.0.203

1 year ago

0.0.202

1 year ago

0.0.209

1 year ago

0.0.208

1 year ago

0.0.207

1 year ago

0.0.206

1 year ago

0.0.201

1 year ago

0.0.200

1 year ago

0.0.216

1 year ago

0.0.215

1 year ago

0.0.214

1 year ago

0.0.213

1 year ago

0.0.219

1 year ago

0.0.218

1 year ago

0.0.217

1 year ago

0.0.212

1 year ago

0.0.211

1 year ago

0.0.210

1 year ago

0.0.227

1 year ago

0.0.226

1 year ago

0.0.225

1 year ago

0.0.224

1 year ago

0.0.229

1 year ago

0.0.228

1 year ago

0.0.223

1 year ago

0.0.222

1 year ago

0.0.221

1 year ago

0.0.220

1 year ago

0.0.197

1 year ago

0.0.196

1 year ago

0.0.195

1 year ago

0.0.194

1 year ago

0.0.199

1 year ago

0.0.198

1 year ago

0.0.193

1 year ago

0.0.192

1 year ago

0.0.191

1 year ago

0.0.190

1 year ago

0.0.169

2 years ago

0.0.164

2 years ago

0.0.163

2 years ago

0.0.162

2 years ago

0.0.168

2 years ago

0.0.167

2 years ago

0.0.166

2 years ago

0.0.165

2 years ago

0.0.175

2 years ago

0.0.174

2 years ago

0.0.173

2 years ago

0.0.172

2 years ago

0.0.179

2 years ago

0.0.178

2 years ago

0.0.177

2 years ago

0.0.176

2 years ago

0.0.171

2 years ago

0.0.170

2 years ago

0.0.186

1 year ago

0.0.185

2 years ago

0.0.184

2 years ago

0.0.183

2 years ago

0.0.189

1 year ago

0.0.188

1 year ago

0.0.187

1 year ago

0.0.182

2 years ago

0.0.181

2 years ago

0.0.180

2 years ago

0.0.238

1 year ago

0.0.237

1 year ago

0.0.236

1 year ago

0.0.235

1 year ago

0.0.239

1 year ago

0.0.230

1 year ago

0.0.234

1 year ago

0.0.233

1 year ago

0.0.232

1 year ago

0.0.231

1 year ago

0.0.249

1 year ago

0.0.248

1 year ago

0.0.247

1 year ago

0.0.246

1 year ago

0.0.241

1 year ago

0.0.240

1 year ago

0.0.245

1 year ago

0.0.244

1 year ago

0.0.243

1 year ago

0.0.242

1 year ago

0.0.252

1 year ago

0.0.251

1 year ago

0.0.250

1 year ago

0.0.254

1 year ago

0.0.253

1 year ago

0.0.159

2 years ago

0.0.158

2 years ago

0.0.153

2 years ago

0.0.152

2 years ago

0.0.151

2 years ago

0.0.150

2 years ago

0.0.157

2 years ago

0.0.156

2 years ago

0.0.155

2 years ago

0.0.154

2 years ago

0.0.161

2 years ago

0.0.160

2 years ago

0.0.128

2 years ago

0.0.127

2 years ago

0.0.126

2 years ago

0.0.125

2 years ago

0.0.129

2 years ago

0.0.124

2 years ago

0.0.123

2 years ago

0.0.122

2 years ago

0.0.121

2 years ago

0.0.139

2 years ago

0.0.138

2 years ago

0.0.137

2 years ago

0.0.136

2 years ago

0.0.131

2 years ago

0.0.130

2 years ago

0.0.135

2 years ago

0.0.134

2 years ago

0.0.133

2 years ago

0.0.132

2 years ago

0.0.149

2 years ago

0.0.148

2 years ago

0.0.147

2 years ago

0.0.142

2 years ago

0.0.141

2 years ago

0.0.140

2 years ago

0.0.146

2 years ago

0.0.145

2 years ago

0.0.144

2 years ago

0.0.143

2 years ago

0.0.84

2 years ago

0.0.85

2 years ago

0.0.86

2 years ago

0.0.87

2 years ago

0.0.88

2 years ago

0.0.89

2 years ago

0.0.80

2 years ago

0.0.81

2 years ago

0.0.82

2 years ago

0.0.83

2 years ago

0.0.73

2 years ago

0.0.74

2 years ago

0.0.75

2 years ago

0.0.76

2 years ago

0.0.77

2 years ago

0.0.78

2 years ago

0.0.79

2 years ago

0.0.70

2 years ago

0.0.71

2 years ago

0.0.72

2 years ago

0.0.62

2 years ago

0.0.63

2 years ago

0.0.64

2 years ago

0.0.65

2 years ago

0.0.66

2 years ago

0.0.67

2 years ago

0.0.68

2 years ago

0.0.69

2 years ago

0.0.60

2 years ago

0.0.61

2 years ago

0.0.59

2 years ago

0.0.106

2 years ago

0.0.51

2 years ago

0.0.105

2 years ago

0.0.52

2 years ago

0.0.104

2 years ago

0.0.53

2 years ago

0.0.103

2 years ago

0.0.54

2 years ago

0.0.55

2 years ago

0.0.109

2 years ago

0.0.56

2 years ago

0.0.108

2 years ago

0.0.57

2 years ago

0.0.107

2 years ago

0.0.58

2 years ago

0.0.102

2 years ago

0.0.101

2 years ago

0.0.100

2 years ago

0.0.50

2 years ago

0.0.48

2 years ago

0.0.49

2 years ago

0.0.117

2 years ago

0.0.40

2 years ago

0.0.116

2 years ago

0.0.41

2 years ago

0.0.115

2 years ago

0.0.42

2 years ago

0.0.114

2 years ago

0.0.43

2 years ago

0.0.44

2 years ago

0.0.45

2 years ago

0.0.119

2 years ago

0.0.46

2 years ago

0.0.118

2 years ago

0.0.47

2 years ago

0.0.113

2 years ago

0.0.112

2 years ago

0.0.111

2 years ago

0.0.110

2 years ago

0.0.37

2 years ago

0.0.38

2 years ago

0.0.39

2 years ago

0.0.30

2 years ago

0.0.31

2 years ago

0.0.32

2 years ago

0.0.33

2 years ago

0.0.34

2 years ago

0.0.35

2 years ago

0.0.36

2 years ago

0.0.120

2 years ago

0.0.26

2 years ago

0.0.27

2 years ago

0.0.28

2 years ago

0.0.29

2 years ago

0.0.25

2 years ago

0.0.95

2 years ago

0.0.96

2 years ago

0.0.97

2 years ago

0.0.98

2 years ago

0.0.99

2 years ago

0.0.90

2 years ago

0.0.91

2 years ago

0.0.92

2 years ago

0.0.93

2 years ago

0.0.94

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago