- When developing with npm, the amount and content of scripts in
package.json
may increase.
- Also, it may not be multi-platform, such as using commands that are not available in some environments.
- Therefore, I will describe how to manage scripts separately using two libraries, nps and nps-utils.
preparation
- As an example, we are going to change the following package.json scripts.
{
"scripts": {
"dev": "NODE_ENV=development nodemon index.js",
"test": "NODE_ENV=test jest --coverage",
"lint": "eslint . --cache"
"build": "NODE_ENV=production run-s build:{clean,js}",
"build:clean": "rm -rf ./dist",
"build:js": "esbuild src/index.js --bundle --outfile=dist/out.js"
},
"devDependencies": {
................,
"esbuild": "^0.6.12",
"nodemon": "^2.0.4",
"jest": "^26.4.0",
"eslint": "^7.7.0",
"npm-run-all": "^4.1.5"
}
}
- This package.json has the following concerns
- The rm command and environment variable settings are limited to the execution environment.
- There is a lot of content and volume, and it will become more complex as it increases in the future.
setting
install
- Install the following two libraries
- nps : npm scripts management tool
- By keeping the details of scripts in a separate file, management and maintenance will be easier.
- It is highly flexible and extensible because it can be written in js and yaml instead of json.
- nps-utils : Packaged tools to enhance nps
- A number of multi-platform libraries are built into the system, making it complete in one.
npm install --save-dev nps nps-utils
init
- Create a configuration file with the following command.
-
※This time, we'll create it in js.
# The default is package-scripts.js
./node_modules/.bin/nps init
# If you create with yaml.
./node_modules/.bin/nps init --type yml
- After creation, the structure is as follows.
.
├── package.json
└── package-scripts.js
└── .......
Example of a configuration template
- First, make the following contents of
package-scripts.js
created in the initialization process.
// Multiplatform support(Mac,Windows,Linux)
const {
series, // Simplification of continuous execution
rimraf, // rm command
crossEnv // Environment variable setting
} = require('nps-utils');
module.exports = {
scripts: {
dev: {
default: crossEnv('NODE_ENV=development nodemon index.js')
},
test: {
default: crossEnv('NODE_ENV=test jest --coverage')
},
lint: {
default: 'eslint . --cache'
},
build: {
default: crossEnv(
`NODE_ENV=production ${series.nps(
'build.clean',
'build.js',
)}`,
),
clean: rimraf('dist'),
js: 'esbuild src/index.ts --bundle --outfile=dist/out.js',
}
}
};
- The content of the final
package.json
is as follows.
{
"scripts": {
"dev": "nps dev",
"test": "nps test",
"lint": "nps lint",
"build": "nps build"
},
"devDependencies": {
................,
"esbuild": "^0.6.12",
"nodemon": "^2.0.4",
"jest": "^26.4.0",
"eslint": "^7.7.0",
"npm-run-all": "^4.1.5",
"nps": "^5.10.0",
"nps-utils": "^1.7.0",
..........
}
}
run
- Each script is executed with the following command.
# npm run script name
# dev
npm run dev
# test
npm run test
Link
Top comments (0)