Cross platform NPM start script

后端 未结 1 797
温柔的废话
温柔的废话 2021-01-05 02:39

I\'m building out an Electron app that will be developed by folks on both Windows and OS X. I\'d like to create a cross-platform start script. So far, I\'ve had exactly zero

相关标签:
1条回答
  • 2021-01-05 03:18

    Environment variables are a problem in Windows.

    As stated Domenic Denicola (one of the main contributors to npm) :

    This is not npm's job. You can run custom Node scripts to set environment variables using process.env if you'd like, or use something that isn't environment variables (like JSON).

    ...

    You can write custom scripts to work around connect's limitations, e.g. in your tests modify process.env.

    (Reference : this issue)

    So we'll manage through a JS script (Solution inspired on this commit) :

    1. Create a exec.js file in a scripts directory

    2. Copy the following code in exec.js :

    var exec = require('child_process').exec;
    
    var command_line = 'electron ./app/';
    var environ = (!process.argv[2].indexOf('development')) ? 'development' : 'production';
    
    if(process.platform === 'win32') {
      // tricks : https://github.com/remy/nodemon/issues/184#issuecomment-87378478 (Just don't add the space after the NODE_ENV variable, just straight to &&:)      
      command_line = 'set NODE_ENV=' + environ + '&& ' + command_line;
    } else {
      command_line = 'NODE_ENV=' + environ + ' ' + command_line;
    }
    
    var command = exec(command_line);
    
    command.stdout.on('data', function(data) {
      process.stdout.write(data);
    });
    command.stderr.on('data', function(data) {
      process.stderr.write(data);
    });
    command.on('error', function(err) {
      process.stderr.write(err);
    });
    
    1. Update your package.json :
    "scripts": {
        "start": "node scripts/exec.js development",
    }
    
    1. Run npm script : npm run start

    Edit 05.04.2016

    There is a very useful npm package that allows manages this problem : cross-env. Run commands that set environment variables across platforms

    0 讨论(0)
提交回复
热议问题