Node.js:如何将终端参数值传递到JS脚本?

5

假设有一个基于jsdomsvgcreator.node.js脚本文件:

var jsdom = require('jsdom');
jsdom.env(
  "<html><body></body></html>",        // CREATE DOM HOOK
  [ 'http://d3js.org/d3.v3.min.js',    // JS DEPENDENCIES online ...
  'js/d3.v3.min.js' ],                 // ... & offline
// D3JS CODE * * * * * * * * * * * * * * * * * * * * * * * *
  function (err, window) {
    var svg = window.d3.select("body")
        .append("svg")
        .attr("width", 100)
        .attr("height", 100);
    svg.append("rect")
        .attr("id", "rect1")
        .attr("x", 10)
        .attr("y", 10)
        .attr("width", 80)
        .attr("height", 80)
        .style("fill", "green");
    // END svg design

  //PRINTING OUT SELECTION
    console.log(window.d3.select("body").html());
 }
// END (D3JS) * * * * * * * * * * * * * * * * * * * * * * * *
);

假设我使用NodeJS终端命令来运行它并生成一个output.svg文件:

node svgcreator.node.js > output.svg  # nodeJS + script command

如何从终端传递参数值到NodeJS?

测试所需的依赖项:

  • svgcreator.node.js github仓库git clone 'git@github.com:hugolpz/svgcreator.node.js.git'
  • 需要jsdom,请使用:sudo npm install -g jsdom(全局安装)。

Solution used (@Matt_Harrison): 我们依赖于 process.env.myVar < p >svgcreator.node.js JS 代码:

var jsdom = require('jsdom');
jsdom.env(
  "<html><body></body></html>",        // CREATE DOM HOOK:
  [ 'http://d3js.org/d3.v3.min.js',    // JS DEPENDENCIES online ...
  'js/d3.v3.min.js' ],                 // ... & offline
// D3JS CODE * * * * * * * * * * * * * * * * * * * * * * * *
  function (err, window) {

    var color = process.env.COLOR;     // <<################# IMPORTANT !!
    var svg = window.d3.select("body")
        .append("svg")
        .attr("width", 100)
        .attr("height", 100);
    svg.append("rect")
        .attr("id", "rect1")
        .attr("x", 10)
        .attr("y", 10)
        .attr("width", 80)
        .attr("height", 80)
        .style("fill", color);         // <<################# IMPORTANT !!
    // END svg design

  //PRINTING OUT SELECTION
    console.log(window.d3.select("body").html());
 }
// END (D3JS) * * * * * * * * * * * * * * * * * * * * * * * *
);

终端NodeJS命令:

COLOR=#66AAFF node svgcreator.node.js > out.svg   # <<############# IMPORTANT !! setting the value.

+1 @Matt_Harrison 的回答和问题都很赞赏!


2
我不太确定你是否只是在寻找这个,但是...你可以使用process.argv将参数从终端传递到浏览器。 - Sandeep Pal
我想从终端传递参数到我的脚本 jsdom.node.js,该脚本在 nodejs JS 引擎 中运行。 - Hugolpz
抱歉!我也是新手,但我很确定,你可以使用 process.argv 数组将参数从终端传递到 js 文件中。例如,在终端上输入 node test.js 2,然后在 js 文件中,你可以通过 console.log(process.argv[2]) 来获取它。希望能帮到你。 - Sandeep Pal
欢迎您的好意,我们通过尝试学习~ - Hugolpz
另请参阅:https://dev59.com/OW855IYBdhLWcg3wbjrO - Hugolpz
1个回答

16
在您的终端中,您可以使用环境变量
$ COLOR=#FFFFFF node jsdom.node.js

在你的JS中,执行以下操作:

var color = process.env.COLOR;

或者你可以给命令添加额外的参数:

$ node jsdom.node.js '#FFFFFF'

并且在你的JS中:

var color = process.argv[2];

如果您想使用库,我建议您查看Minimist库,或者选择更全面的解决方案Commander

当你说“这将随后可用”时,你是指“在js / d3js脚本内”,对吗?(只是确认一下)。 - Hugolpz
来了(晚餐在这里)。我会在我的JS中添加var color = process.env.COLOR;,然后运行它。 - Hugolpz
n⁰1可以工作!我编辑了你的答案,使其更加清晰。 - Hugolpz
谢谢,很高兴能帮助到您。 - Matt Harrison
有没有类似于 node svgcreator.node.js COLOR='#FFFFFF' > out.svgvar color = process.argv[COLOR]; 这样的东西?我尝试了一下,但对我来说不起作用。 - Hugolpz
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接