如何在运行JavaScript文件的package.json文件中添加自定义脚本?


176

我希望能够script1在将要运行的项目目录中执行命令node script1.js

script1.js是同一目录中的文件。该命令必须特定于项目目录,这意味着如果我将项目文件夹发送给其他人,他们将能够运行相同的命令。

到目前为止,我尝试添加:

"scripts": {
    "script1": "node script1.js"
}

到我的package.json文件,但是当我尝试运行时script1,得到以下输出:

zsh: command not found: script1

有谁知道将上述脚本添加到项目文件夹的必要步骤?

*注意:该命令不能添加到bash配置文件中(不能是计算机专用命令)

如果您需要任何说明,请告诉我。


3
您如何尝试运行它?您是否正在使用“ npm run script1”?
niorad '16

3
您是否使用运行过script1 npm run script1
Claudiordgz '16

@Claudiordgz是正确的,或者如Sujeet的回答一样,“ npm start”和“ npm test”是名为“ start”和“ test”的脚本的快捷方式
mjohnsonengr

1
在我的终端中,我需要能够键入一个script1应该运行的单词命令node script1.js
Jake.JS,2016年

Answers:


260

自定义脚本

npm run-script <custom_script_name>

要么

npm run <custom_script_name>

在您的示例中,您将要运行npm run-script script1npm run script1

参见https://docs.npmjs.com/cli/run-script

生命周期脚本

Node还允许您为某些生命周期事件运行自定义脚本,例如npm install运行后。这些可以在这里找到。

例如:

"scripts": {
    "postinstall": "electron-rebuild",
},

这将electron-rebuildnpm install命令后运行。


1
npm run-script scriptname为我工作,但是npm run scriptname没有!
blueprintchris

没有“ run”命令如何运行自定义脚本?Sails.js做到了-它有一个sails lift甚至需要NPM 的命令。通过NPM安装它会在安装它的系统上添加终端脚本吗?如果没有,这是怎么做的?
GalGrünfeld19年

@GalGrünfeld您是否在全球范围内安装了帆(npm install -g)?
伊夫·多夫斯曼

据我所知,我从Sail网站上记得,并在全球范围内(通过-g)进行了安装,发现Sails安装了bash / cmdlet脚本(例如sails generate api <api_name>((bash / cmdlet取决于安装的机器))并且增加了机上对这些脚本全局路径。
加尔格伦菲尔德

如何通过我的package.json运行下载的npm包的js文件?
Hardik Rana

26

我已经创建了以下内容,并且可以在我的系统上正常工作。请尝试以下方法:

package.json:

{
  "name": "test app",
  "version": "1.0.0",
  "scripts": {
    "start": "node script1.js"   
  }
}

script1.js:

console.log('testing')

在命令行中运行以下命令:

npm start

附加用例

我的package.json文件通常具有以下脚本,这些脚本使我能够查看文件的打字稿,sass编译以及运行服务器。

 "scripts": {
    "start": "concurrently \"sass --watch ./style/sass:./style/css\" \"npm run tsc:w\" \"npm run lite\" ",    
    "tsc": "tsc",
    "tsc:w": "tsc -w", 
    "lite": "lite-server",
    "typings": "typings",
    "postinstall": "typings install" 
  }

1
运行script1.js文件的命令必须是一个自定义的单字命令,称为script1
Jake.JS '16

然后更改"start"script1,您可以使用任何喜欢的名称,我更喜欢使用它start来明确定义应该运行的内容
Sujeet Jaiswal 2016年

3
@ sujeet-jaiswal仅仅从开始更改为script1是行不通的。“开始”一词在npm中保留,因此可以使用。即使在package.json中定义了script1这个单词,它也不会被识别。上面的wesleysmyth答案是正确的,只需将run添加到调用中即可。
PredragStojadinović17年

17

步骤如下:

  1. 在package.json中添加:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. bin在项目目录中创建一个文件夹,并runScript1.js使用以下代码添加文件:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. npm install shelljs在终端中运行

  4. npm link在终端中运行

  5. 现在可以从终端运行script1它将运行node script1.js

参考:http : //blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


这应该是基于@ Jake.JS对他的问题的注释(即,如何使用单个命令运行它)的可接受答案。
AdamJB

这应该是基于问题的公认答案
Damian

2

假设您要在脚本中使用一条命令运行2条命令:

"scripts":{
  "start":"any command",
  "singleCommandToRunTwoCommand":"some command here && npm start"
}

现在转到您的终端并在那里运行npm run singleCommandToRunTwoCommand


虽然有帮助,但这并不能直接回答OP的问题。
AdamJB

1
基本上,我们旨在引导您走上正确的道路,而不仅仅是您自己做。这是正确的学习方式。
Soban Arshad

@AdamJB他这么做了,因为他使用了npm run <script_name>
Kubadev

@kubadev,我并不是说要学究,只是指出OP要求脚本根据其对自己问题的评论使用一个单词命令运行:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

例:

  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "build_c": "ng build --prod && del \"../../server/front-end/*.*\" /s /q & xcopy /s dist \"../../server/front-end\"",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

如您所见,脚本“ build_c”正在构建角度应用程序,然后从目录中删除所有旧文件,然后最终复制结果构建文件。


2
下面是关于一些有用的信息&&- stackoverflow.com/questions/39172536/...
Simon_Weaver
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.