Confusion with npm scripts - node.js

I am trying to figure out how the https://github.com/fastify/fastify-example-twitter/blob/master/package.json works.
Specifically, it has a script entry as: "start": "fastify index.js".
However, there is no requirement to install fastify globally. Nonetheless, npm start is working fine. It does start fastify, while doing it from the shell results in: -bash: fastify: command not found
What is happening when npm start is invoked? Why I cannot run this from the command line, while npm runs this script command just fine.

If your dependency appears in an npm script command, the executable is added to your path.
From the npm scripts documentation:
If you depend on modules that define executable scripts, like test
suites, then those executables will be added to the PATH for executing
the scripts. So, if your package.json has this:
{
"name" : "foo" ,
"dependencies" : {
"bar" : "0.1.x"
} ,
"scripts": {
"start" : "bar ./test"
}
}
then you could run npm start to execute the bar script, which is
exported into the node_modules/.bin directory on npm install.

fastify is listed as a dependency, and as such can be ran as an npm script. The same goes for mocha, standard, and snazzy. None of them need to be globally installed, but are ran via their npm scripts.

Related

ERR Missing script critical

I am trying to generate critical css path using node module by addy osmania (https://github.com/addyosmani/critical)
i have below code in package json
"scripts": {
"criticalcss": "node criticalcss.mjs",
}
when i do npm run critical i get bellow error...
npm ERR! Missing script: "critical"
What am i doing wrong? My node installation is in c:user/admin and my production files are in xampp htdocs
i used node script.mjs and it worked
Your script is named criticalcss and you are running the command npm run critical.
Try
npm run criticalcss

How does NPM resolve & run scripts from package-json?

For curiosity's sake, I want to create a folder in node_modules and be able to run it as a script in package.json's "scripts", but I have not been able to find out how to.
I've noticed with other package.json scripts like "react-scripts" that they wont work in the command line, but will when NPM runs them. How does npm resolve scripts?
Does it have to be a legit package for NPM to run it? (Like, will it check against the NPM registry for if that package exists, or contains scripts?)
If a module has a ["bin" entry in its package.json]1, then npm will put the executable script specified by that "bin" entry into a .bin folder in node_modules.
When running a script with npm run, npm will put that node_modules/.bin directory first in the PATH so they are found with npm run but not when run directly from the shell.

How to run kss package? Script not recognized by node

I want to create a CSS documentation and installed KSS Doc: https://github.com/kneath/kss
But the script (kss --css ../styles/style.css --source styles) doesn't work as written in the doc. I don't use Webpack or any fremework, so only have a package.json file.
Here is how to use KSS: https://github.com/kss-node/kss-node
For example, $ kss --demo doesn't work.
Should i add script in my package.json file, and if yes, what?
Or do I need Webpack?
I'm using node 10.15.3 and KSS is old too.
The error I get:
$ npm run kss --confignode_modules/kss/demo/kss-config.json
npm ERR! missing script: kss
I would like to be able to run the script, give the source and destination as explained in the doc. Thanks.
You need to add a script to your package.json in order to run it:
{
...
"scripts": {
...
"kss": "node ./node_modules/kss/index.js" // `node` is required on Windows
}
...
}
and then run it like this:
npm run kss -- --config node_modules/kss/demo/kss-config.json
Not the additional -- after the script name. It tells npm that the following arguments need to be passed to the kss command itself and not to the npm run command.

npm run does nothing

I've been working with Node.js/npm for a while, but I never used npm scripts. I was quite surprised to find that I can't get them to work at all on my Windows/Cygwin system. With a package.json like this ...
{
"name": "demo",
"scripts": {
"env": "env",
"hello": "echo Hello!",
"crap": "I am complete nonsense."
}
}
... all three npm run commands do nothing. npm run crap executes and returns immediately with an OK status (I tested with the -dd parameter); npm run doesntexist throws the expected error. Testing without Cygwin on the regular Windows shell made no difference.
I finally found out myself. There is an npm setting with which you can stop all npm scripts from running. For some reason, my userconfig file ~/.npmrc contained the setting ignore-scripts = true. If you run into this problem, check npm config list.

Locally installed gulp not running in command line?

I am new to nodejs and gulp stuff. I working on a nodejs project in which I have to run jslint on all the files. I am using gulp for this purpose.
My problem is that In order to run gulp on cli I don't want to install gulp globally and also does not want to update my path variable, So I have installed gulp and other node modules in my project locally using the package.json file
cd myproject
npm install
Since I don't want to install gulp globally and want to run the local gulp I have added script in my package.json file like this as given in this question
{
"name": "",
"version": "1.0.0",
"main": "index.js",
"private": true,
"dependencies": {
"async": "1.5.0"
},
"devDependencies": {
"gulp": "^3.9.0",
"gulp-jslint": "^0.2.2"
},
"scripts": {
"gulp": "./node_modules/.bin/gulp" // is this correct?
}
}
Add added a gulpfile.js inside my myproject folder
var gulp = require('gulp');
// include plug-ins
var jslint = require('gulp-jslint');
// JS hint task
gulp.task('lint', function() {
gulp.src('./common/srp/*.js')
.pipe(jslint())
.pipe(jslint.reporter('default'));
});
gulp.task("default", ["lint"]);
But now on my command line inside myproject folder, when I run gulp and gulp lint I get an error
user1-VirtualBox:~/myproject$ gulp lint
/usr/local/node-v0.10.26-linux-x64/bin/gulp No such file or
directory
Its looking for gulp in the global node module.
Is there a way to make gulp run on cli without installing globally and updating PATH variable.
Any help will be appreciated
Thanks
You can find any executable installed by npm in node_modules/.bin. So you can run gulp locally using:
./node_modules/.bin/gulp
You can find more information at no command 'gulp' found - after installation
With your code you should be able to run command
npm run gulp
Please try
One way to define script is
"scripts": {
"gulp": "gulp"
}
If in case you are not able to run gulp command in your project, run
npm link gulp
It will link your global install gulp with your local project. Then try
gulp -v
If it is showing you the version then you are done. Now you can run any gulp command as you want.
Scripts defined in package.json are accessed through NPM, i.e. npm run-script gulp. I imagine you're trying to run plain old gulp, which should fail since you didn't install it globally.
The scripts section won't automatically create an alias, which I think is your mistake here. You could define one yourself or create a simple bash script if you don't want to type it every time.
Try:
path_to_node path_to_gulp_js gulp_task
Example:
node\node.exe node_modules\gulp\bin\gulp.js build
Like #snorberhuis said. The only way for me to get gulp to work globally was to call gulp manually
I am building in a Jenkins environment
Execute Windows Batch Command
cd your-app
npm install gulp
Execute Windows Batch Command
cd your-app\node_modules\.bin
gulp
Just another alternative that will work locally but will give you global like feeling.
Add to your shell config i.e. ~/.bash_profile the following
export PATH=$PATH:./node_modules/.bin
you have to source that file, execute rehash or just open a new shell and then gulp (and any other script inside that folder) shall be available as a global command.
The way I did this after bashing my head every possible place is simply going to your Application and install npm dependencies like this:
1- E:\webra-jenkins\Code\trunk\WebRa.Web>npm install
Once npm installed then go this directory
2- [%Application_path%]\node_modules\.bin
And execute the gulp and give your file/task, like this:
3-[%Application_path%]\node_modules\.bin>gulp gulpfile --tasks
In my case as I saw the following lines... I got the inner happiness
18:06:36] Working directory changed to [%Application_path%]
[18:06:37] Tasks for [%Application_path%]\gulpfile.js
Now you can run your tasks 1 by one.
[%Application_path%]\node_modules\.bin>gulp pack-vendor-js
Check in your project node_modules/.bin folder and make sure gulp is in there. I had a case where it wasn't there that I never tracked down the reason for. If it isn't there, try re-installing gulp locally and see if it shows up. If that doesn't work and you get tired of the problem, the gulp-cli package will fix it for sure, but that shouldn't be something you have to do.
The simplest solution I know of is to use npm bin:
`npm bin`/gulp ...
This keeps you away from hard-coding any paths.
Nothing was working for me. I followed all instructions from everyone. No matter what I did I could not run the Gulp commands.
To fix this I opened the Node.js command prompt that comes installed automatically when you download and run node.js.
Once I was in this command prompt I could run the following commands:
npm install -g gulp
gulp -v
This is probably a matter of common knowledge but as someone starting out no one suggested to run the node.js command prompt and install gulp from there. Everything I read talked about regular powershell or command prompts with elevated permissions.
Globally install gulp in C:\Users\%USERNAME% using this command
npm install –g gulp
You can install any other gulp methods you need to use.. Ex:
npm install -g gulp-concat
npm install -g gulp-uglify
npm install -g gulp-replace
Then at the directory you wish to use GULP. Open the command prompt (Shift + RightClick) then install locally and you'll be able to execute gulp.
npm install gulp
You can install any other gulp methods you need to use.. Ex:
npm install gulp-concat
npm install gulp-uglify
npm install gulp-replace

Resources