# Copyright 2016 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os import subprocess import sys import py_utils from py_utils import binary_manager from py_utils import dependency_util def _NodeBinariesConfigPath(): return os.path.realpath(os.path.join( os.path.dirname(os.path.abspath(__file__)), 'node_binaries.json')) class _NodeManager(object): def __init__(self): self.bm = binary_manager.BinaryManager( [_NodeBinariesConfigPath()]) self.os_name = dependency_util.GetOSNameForCurrentDesktopPlatform() self.arch_name = dependency_util.GetArchForCurrentDesktopPlatform( self.os_name) self.node_path = self.bm.FetchPath('node', self.os_name, self.arch_name) self.npm_path = self.bm.FetchPath('npm', self.os_name, self.arch_name) self.node_initialized = False def InitNode(self): if self.node_initialized: return # So we only init once per run self.node_initialized = True old_dir = os.path.abspath(os.curdir) os.chdir(os.path.join(os.path.abspath( py_utils.GetCatapultDir()), 'common', 'node_runner', 'node_runner')) subprocess.call([self.node_path, self.npm_path, 'install']) os.chdir(old_dir) _NODE_MANAGER = _NodeManager() def InitNode(): _NODE_MANAGER.InitNode() def GetNodePath(): return _NODE_MANAGER.node_path def GetNodeModulesPath(): _NODE_MANAGER.InitNode() path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'node_modules')) if sys.platform.startswith('win'): # Escape path on Windows because it's very long and must be passed to NTFS. path = u'\\\\?\\' + path return path