我需要在package.json
上指定{ engines: { "python": "2.7.11" } }
版本。
我可以简单地做:
<!DOCTYPE html>
<html>
<head>
<style>
canvas{
border:solid 5px #333;
}
</style>
</head>
<body>
<button onclick="changeScale(0.10)">+</button>
<button onclick="changeScale(-0.10)">-</button>
<div id="container">
<canvas width="700" height="500" id ="canvas1"></canvas>
</div>
<script>
var canvas = document.getElementById('canvas1');
var context = canvas.getContext("2d");
var imageDimensions ={width:0,height:0};
var photo = new Image();
var isDown = false;
var startCoords = [];
var last = [0, 0];
var windowWidth = canvas.width;
var windowHeight = canvas.height;
var scale=1;
photo.addEventListener('load', eventPhotoLoaded , false);
photo.src = "http://www.html5rocks.com/static/images/cors_server_flowchart.png";
function eventPhotoLoaded(e) {
imageDimensions.width = photo.width;
imageDimensions.height = photo.height;
drawScreen();
}
function changeScale(delta){
scale += delta;
drawScreen();
}
function drawScreen(){
context.fillRect(0,0, windowWidth, windowHeight);
context.fillStyle="#333333";
context.drawImage(photo,0,0,imageDimensions.width*scale,imageDimensions.height*scale);
}
canvas.onmousedown = function(e) {
isDown = true;
startCoords = [
e.offsetX - last[0],
e.offsetY - last[1]
];
};
canvas.onmouseup = function(e) {
isDown = false;
last = [
e.offsetX - startCoords[0], // set last coordinates
e.offsetY - startCoords[1]
];
};
canvas.onmousemove = function(e)
{
if(!isDown) return;
var x = e.offsetX;
var y = e.offsetY;
context.setTransform(1, 0, 0, 1,
x - startCoords[0], y - startCoords[1]);
drawScreen();
}
</script>
</body>
</html>
?
答案 0 :(得分:0)
将"engines": { "python": "2.7.11" }
放在您的package.json中不会引起任何问题(据我所知),但实际上也不会执行任何操作。
确定执行此操作的适当方法取决于项目的详细信息。如果与您编写的Python代码有关,则可以在Python脚本本身中检查版本。如果与package.json
中的构建步骤有关,则可以在构建步骤中进行测试。
答案 1 :(得分:0)
从 NPM 7.x 开始(同样适用于旧版 NPM 6.x),"engines"
中 package.json
字段的唯一有效条目是 "node"
版本,以及"npm"
版本。
此外,这不是硬约束,除非您也使用 "engine-strict"
,如 NPM docs 所述:
除非用户设置了 engine-strict
配置标志,否则此字段仅供参考,并且只会在您的软件包作为依赖项安装时产生警告。
您的要求(期待特定的 python
版本)与环境要求的相关性比与您的 Node/NPM 环境相关。
您可以通过实现 "postinstall"
NPM 脚本来实现此目的,如果未找到所需版本,该脚本可能会导致错误:
{
"scripts": {
"postinstall": "node ./check-python.js"
}
}
此脚本会在 npm install
之后由 NPM 自动执行。您也可以改用“预安装”。
根据您的要求,考虑在您的“构建”或“预构建”脚本中使用它。在 docs 中查看有关 NPM 前后脚本的更多详细信息。
然后,您的 check-python.js
脚本可能类似于:
const { exec } = require('child_process');
const EXPECTED_PYTHON_VERSION = "2.7.11";
exec('python -c "import platform; print(platform.python_version())"',
function(err, stdout, stderr) {
const currentPythonVersion = stdout.toString();
if(currentPythonVersion !== EXPECTED_PYTHON_VERSION) {
throw new Error(`Expected Python version '${EXPECTED_PYTHON_VERSION}' but found '${currentPythonVersion}'. Please fix your Python installation.`);
}
});