我正在尝试创建一个可以在全球范围内安装的软件包。我的package.json有:
{
"name": "my-new-package",
"version": "1.0.0",
"main": "index.js",
"preferGlobal": true,
"bin": {
"my-new-package": "index.js"
}
}
我可以使用“ node index.js”运行它,并将其发布到npm。
问题是,当我npm i -g my-new-package
在Windows上全局安装它时,文件my-new-package.cmd
为:
@"%~dp0\node_modules\my-new-package\index.js" %*
因此,当我执行my-new-package
它时,将使用默认编辑器打开javascript文件。
相反,其他全局包使用node.exe
。这是cute-files.cmd
示例:
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\cute-files\cute-files.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\cute-files\cute-files.js" %*
顺便说一句,当我在Linux上安装它时,会得到相同的行为。
那么,如何在全局安装节点的情况下配置我的软件包以使用节点呢?
这是创建全局可执行的nodejs包的方法
mkdir my-new-package
cd my-new-package
首先创建 cat package.json
{
"name": "my-new-package",
"version": "1.0.0",
"description": "global module my-new-package",
"main": "./lib/index.js",
"bin": {
"my-executable-name": "./bin/test-module.js"
},
"author": "",
"license": "ISC",
"preferGlobal": "true"
}
现在将这两个dirs作为dir的子代 my-new-package
mkdir bin
mkdir lib
这是我们需要的另一个文件 cat lib/index.js
var sayHello = function(name) {
return 'Hello, ' + name;
};
// Allows us to call this function from outside of the library file
// Without this, the function would be private to this file
exports.sayHello = sayHello;
现在创建一个文件 cat bin/test-module.js
#!/usr/bin/env node
var lib= require('../lib/index.js');
var greeting = lib.sayHello('hello everyone');
console.log(greeting);
现在进入my-new-package
文件所在的目录package.json
并发出全局安装命令
cd my-new-package
npm install -g .
注意上述安装命令中的句点
它的输出将是这样的
/home/stens/node-v6.5.0/bin/my-new-package -> /home/stens/node-v6.5.0/lib/node_modules/my-new-package/bin/test-module.js
/home/stens/node-v6.5.0/lib
└── [email protected]
现在它已全局安装,您可以在任何目录中发布它
my-executable-name
它将以
Hello, hello everyone
有趣的是,我们的新可执行文件按以下方式位于nodejs全局bin目录中:
which my-executable-name
回应
/home/stens/node-v6.5.0/bin/my-executable-name
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句