Answers:
我认为您可以使用“引擎”字段:
{ "engines" : { "node" : ">=0.12" } }
正如您所说的那样,您的代码绝对不能与任何较低版本一起使用,您可能也希望“ engineStrict”标志:
{ "engineStrict" : true }
可在npmjs网站上找到package.json文件的文档
更新资料
engineStrict
现在已弃用,因此只会发出警告。现在,取决于用户npm config set engine-strict true
是否愿意运行它。
更新2
如下所述,在Node的版本不兼容的情况下,.npmrc
在项目的根目录下创建一个文件(与package.json文件处于同一级别)engine-strict=true
将导致文本错误。
engineStrict
已经很少使用了很少使用的package.json选项,使用 时会产生警告。从npm @ 3开始,字段会被忽略,并且违反引擎的行为只会产生警告。如果您作为用户希望严格执行引擎字段,只需运行npm config set engine-strict true”
cd .. && npm i <folder-name>
检查项目本身。但是,这将触发自身的整个构建。
engine-strict=true
现在添加到您的.npmrc中具有相同的效果
加
至 package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
到文件.npmrc
(靠近package.json
,相同目录)
engine-strict=true
npm install
; 与工作yarn
以及
package.json
在“引擎”部分设置了与上述(11.13.0
和6.7.0
)类似的.npmrc
内容,并在上面仅指定了内容。我让nvm将我切换到较旧的节点版本,然后运行npm install
,但是它只是安装了依赖项,甚至没有提到引擎版本不匹配。
就像伊巴姆所说,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脚本)才尊重它。
.nvmrc
如果您可能正在使用像这样的NVM,则可以在git跟踪的.nvmrc
文件中指示给定项目所需的nodejs版本:
echo v10.15.1 > .nvmrc
这不会自动对生效cd
,这是理智的:用户必须然后执行以下操作:
nvm use
现在该节点版本将用于当前shell。
您可以列出拥有的节点的版本:
nvm list
.nvmrc
记录在:https : //github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
在以下cd
位置询问如何自动选择该节点版本:根据项目自动切换到正确的Node版本
经NVM 0.33.11测试。
还有另一种更简单的方法:
npm install Node@8
(将Node 8保存为package.json中的依赖项)之所以有效,node
是因为它只是一个将节点作为其二进制程序包交付的程序包。它仅包含为node_module / .bin,这意味着它仅使节点可用于程序包脚本。不是主壳。
在此处查看Twitter上的讨论:https://twitter.com/housecor/status/962347301456015360
./node node-sass
而不仅仅是node-sass
。不确定所有.bin文件是否相同。
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);
});});