我有一个Node.js项目,需要Node版本12或更高。有没有办法在包中指定这个。Json文件,以便安装程序自动检查并通知用户是否需要升级?
当前回答
您可以在包中设置engines字段。为节点或NPM版本或两者设置要求:
"engines" : {
"npm" : ">=8.0.0 <9.0.0",
"node" : ">=16.0.0 <17.0.0"
}
为了通过npm强制执行这个命令,你需要创建一个.npmrc文件(并将其提交到存储库中),并将engines-strict选项设置为true,这将导致npm命令(如npm install)在所需的引擎版本不匹配时失败:
# .npmrc
engine-strict=true
如果没有这个文件,每个开发人员都需要在他们的本地工作空间中运行npm config set engine-strict true来开启这个选项。
原来的答案
正如你说的,你的代码肯定不能在任何低版本下工作,你可能也需要"engineStrict"标志:
{ "engineStrict" : true }
包的文档。Json文件可以在NPMJS网站上找到
更新
engineStrict现在已弃用,所以这只会给出一个警告。现在轮到用户执行npm config set engine-strict true,如果他们想要这个。
更新2
正如ben在下面指出的,在你的项目的根目录下创建一个.npmrc文件(与你的包在同一级别)。如果Node版本不兼容,使用text engine-strict=true将在安装过程中强制报错。
其他回答
您可以在包中设置engines字段。为节点或NPM版本或两者设置要求:
"engines" : {
"npm" : ">=8.0.0 <9.0.0",
"node" : ">=16.0.0 <17.0.0"
}
为了通过npm强制执行这个命令,你需要创建一个.npmrc文件(并将其提交到存储库中),并将engines-strict选项设置为true,这将导致npm命令(如npm install)在所需的引擎版本不匹配时失败:
# .npmrc
engine-strict=true
如果没有这个文件,每个开发人员都需要在他们的本地工作空间中运行npm config set engine-strict true来开启这个选项。
原来的答案
正如你说的,你的代码肯定不能在任何低版本下工作,你可能也需要"engineStrict"标志:
{ "engineStrict" : true }
包的文档。Json文件可以在NPMJS网站上找到
更新
engineStrict现在已弃用,所以这只会给出一个警告。现在轮到用户执行npm config set engine-strict true,如果他们想要这个。
更新2
正如ben在下面指出的,在你的项目的根目录下创建一个.npmrc文件(与你的包在同一级别)。如果Node版本不兼容,使用text engine-strict=true将在安装过程中强制报错。
就像Ibam所说的,engineStrict现在已弃用。但我找到了这个解决方案:
check-version.js:
import semver from 'semver';
import { engines } from './package';
const version = engines.node;
if (!semver.satisfies(process.version, version)) {
console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
process.exit(1);
}
package.json:
{
"name": "my package",
"engines": {
"node": ">=50.9" // intentionally so big version number
},
"scripts": {
"requirements-check": "babel-node check-version.js",
"postinstall": "npm run requirements-check"
}
}
点击这里了解更多信息: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
还有一件事。 一个点文件。Nvmrc '可用于要求特定的节点版本- https://github.com/creationix/nvm#nvmrc
但是,它只被npm脚本(和yarn脚本)尊重。
一个Mocha测试用例示例:
describe('Check version of node', function () {
it('Should test version assert', async function () {
var version = process.version;
var check = parseFloat(version.substr(1,version.length)) > 12.0;
console.log("version: "+version);
console.log("check: " +check);
assert.equal(check, true);
});});
还有另一种更简单的方法:
npm安装Node@8(将Node 8保存为package.json中的依赖项) 您的应用程序将使用Node 8为任何人运行-甚至Yarn用户!
这是因为node只是一个包,它将node作为它的包二进制文件发布。它只是包含node_module/.bin,这意味着它只使node对包脚本可用。不是主外壳。
查看Twitter上的讨论:https://twitter.com/housecor/status/962347301456015360
在package.json中添加以下内容:
"engines": {
"npm": ">=8.0.0 <9.0.0",
"node": ">=16.0.0 <17.0.0"
},
将以下内容添加到.npmrc(与package.json相同目录):
engine-strict=true
推荐文章
- NPM清洁模块
- 在Node.js中加载基本HTML
- Node.js和CPU密集型请求
- 为什么在节点REPL中没有定义__dirname ?
- 在Node.js中克隆对象
- Node.js中的process.env.PORT是什么?
- js的Mongoose.js字符串到ObjectId函数
- ELIFECYCLE Node.js错误是什么意思?
- npm -D标志是什么意思?
- 如何完全卸载Ubuntu中的nodejs, npm和node
- 在猫鼬模式中添加created_at和updated_at字段
- 我如何把变量javascript字符串?
- 如何强制tsc忽略node_modules文件夹?
- NPM全局安装“无法找到模块”
- MongoDB和Mongoose的区别