sezna / nps

NPM Package Scripts -- All the benefits of npm scripts without the cost of a bloated package.json and limits of json
MIT License
1.43k stars 93 forks source link

Automatic conversion using init does not take into account $npm_package #226

Open ben-eb opened 3 years ago

ben-eb commented 3 years ago

Scripts file (or at least the relevant bits):

module.exports = {
  scripts: {
    build: 'eleventy --input src --output dst',
    develop: '$npm_package_scripts_build --serve',
    test: 'echo "Error: no test specified" && exit 1'
  }
};

The command executed:

nps develop

The output:

nps is executing `develop` : $npm_package_scripts_build --serve
/bin/sh: --serve: command not found
The script called "develop" which runs "$npm_package_scripts_build --serve" failed with exit code 127 https://github.com/sezna/nps/blob/master/other/ERRORS_AND_WARNINGS.md#failed-with-exit-code

Problem description:

npm allows templating in values from package.json; a script like $npm_package_scripts_build --serve would be expanded out to eleventy --input src --output dst --serve (given a build script of eleventy --input src --output dst). As nps init blows away the existing scripts, even if this variable were templated in it would not be valid.

Suggested solution:

Perhaps it could be enough to throw on init if one of these variables are found, since automatic conversion is not necessarily what you want. For instance, you could have a script like this:

{
  "scripts": {
    "version": "echo Current version: v$npm_package_version"
  }
}

Capturing the version as a static value into your package-scripts.js on nps init is not equivalent here. 🙂