我正在创作一个具有模块和命令行可执行文件的npm包。 npm包has a version。
我希望我的模块知道这个版本,以便我可以从my_executable -v
报告它,并在输出中使用它(例如"由MyPackage v1.3.2和#34生成;) 。但是,我不想在两个地方(在我的模块和我的package.json
中)输入相同的版本号,因为在某些时候我保证会搞砸并忘记更新一个或者其他。我怎么能......
package.json
从我的模块中读取版本?
gemspec
文件是纯Ruby代码,可以加载模块并从派生代码中填充参数。我认为使用npm / package.json package.json
中指定的版本?
package.json
是否保证与我的模块一起安装在已知位置?我怎么把它拉进去?手动阅读JSON并解析它? 修改:由于我的项目文件结构,简单的let pkg = require('./package.json')
在我的情况下不起作用:
mypackage/
bin/myexecutable # uses require('../lib/mymodule.js')
lib/mymodule.js # needs to load package.json
package.json
答案 0 :(得分:2)
您可以从package.json
中提取包的版本,如下所示:
let pkg = require('./package.json');
访问pkg.version
以获取版本,例如:
console.log(pkg.version);
如果package.json
与您正在执行的文件不在同一目录中:
let pkg = require(__dirname + '/path/to/package.json')
答案 1 :(得分:1)
1)通用的解决方案是:
const path = require('path');
// will be used to check file existence
const {accessSync} = require("fs");
function getMainPackage() {
let mainModuleName, pathToPackage;
const mainModuleNameOnError = {
name: "unknown",
version: "unknown",
};
try {
mainModuleName = require.main.paths.find((modulesPath) => {
pathToPackage = path.resolve(modulesPath, "..", "package.json");
try {
accessSync(pathToPackage);
} catch (e) {
return false;
}
return true;
});
} catch (e) {
return mainModuleNameOnError;
}
return (mainModuleName)
? require(pathToPackage);
: mainModuleNameOnError;
}
//example
const pkg = getMainPackage();
console.log(pkg.version);
2)如果你知道你的package.json放在哪里:
let pkg = require(<the_packagejson_folder> + './package.json');
console.log(pkg.version);
3)如果您的应用程序是使用&nbsp; npm start&#39;启动的,您只需使用:
process.env.npm_package_version
有关详细信息,请参阅package.json vars。