Skip to content
Permalink
Browse files

Merge pull request #219 from keicoon/master

Add lib script 'load npm'
  • Loading branch information
crocuis committed Jul 22, 2018
2 parents 69bae55 + 0f078f7 commit 9348b31e72bb0835b72b15216c5ad468a1ddb6e2
Showing with 80 additions and 1 deletion.
  1. +79 −0 Examples/Content/Scripts/demos/lib/fancyLoadNpm.js
  2. +1 −1 Examples/Content/Scripts/demos/lib/npm.js
@@ -0,0 +1,79 @@
const delay = require('./delay');
const npm = require('./npm');

module.exports = (moduleName = '', global = {}) => {
const validModuleName = moduleName.replace(/\//g, "_");

const __scriptPath = Context.GetDir('GameContent') + 'Scripts';
const __srcScriptPath = `${__scriptPath}/${validModuleName}.js`;
const __desScriptPath = `${__scriptPath}/bundle_${validModuleName}.js`;

function IsNeedPrepare() {
return JavascriptLibrary.FileExists(__desScriptPath);
}

function Prepare() {
return new Promise(resolve => {
npm('browserify').then(() => npm(validModuleName)).then(() => {
const script = `global['cached_${validModuleName}'] = require('${moduleName}');`;
JavascriptLibrary.WriteStringToFile(Context, __srcScriptPath, script);
resolve()
});
});
}

function Process() {
const script = `(() => {
var browserify = require('browserify');
var b = browserify();
b.add('${__srcScriptPath}');
var fs = require('fs');
var bundleFs = fs.createWriteStream('${__desScriptPath}');
b.bundle().pipe(bundleFs);
})()`;

const __browsifyScriptPath = `${__scriptPath}/temp.js`;
JavascriptLibrary.WriteStringToFile(Context, __browsifyScriptPath, script);

let p = JavascriptProcess.Create(
'node',
`${__browsifyScriptPath}`,
true, false, false, 0, '', true
)
console.log('browserify', __srcScriptPath, __desScriptPath)
function pipe() {
let s = p.ReadFromPipe()
// @NOTE:
// console.log(s)
}
return new Promise(resolve => {
while (p.IsRunning()) {
delay(50).then(pipe);
}

JavascriptLibrary.DeleteFile(__browsifyScriptPath);
JavascriptLibrary.DeleteFile(__srcScriptPath);

resolve();
})
}

function PostInit() {
require(__desScriptPath);

newModule = global[`cached_${validModuleName}`];
delete global[`cached_${validModuleName}`];
}

let newModule = {};

if (IsNeedPrepare() == false) {
Prepare().then(Process).then(PostInit);
} else {
PostInit();
}

return newModule;
};
@@ -5,7 +5,7 @@ async function npm(what) {
if (m) return m

function locate_npm() {
let cmd = `-e console.log([...process.argv[0].replace(/\\\\/g,'/').split('/').slice(0,-1),'node_modules/npm/cli.js'].join('/'))`
let cmd = `-e console.log([...process.argv[0].replace(/\\\\/g,'/').split('/').slice(0,-1),'node_modules/npm/bin/npm-cli.js'].join('/'))`
let p = JavascriptProcess.Create('node', cmd, false, true, true, 0, '', true)
p.Wait()
return p.ReadFromPipe().split('\n')[0]

0 comments on commit 9348b31

Please sign in to comment.
You can’t perform that action at this time.