From 63fddb630c0d7f91ddcc9a90e2624249276d4589 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim=20D=C3=BCsterhus?= Date: Tue, 16 Aug 2016 13:40:01 +0200 Subject: [PATCH] Ignore missing modules for r.js --- .../install/files/js/require.build-acp.js | 113 +++++++++------ wcfsetup/install/files/js/require.build.js | 135 ++++++++++-------- 2 files changed, 147 insertions(+), 101 deletions(-) diff --git a/wcfsetup/install/files/js/require.build-acp.js b/wcfsetup/install/files/js/require.build-acp.js index 3d48a52aed..a897786073 100644 --- a/wcfsetup/install/files/js/require.build-acp.js +++ b/wcfsetup/install/files/js/require.build-acp.js @@ -1,51 +1,74 @@ -({ - mainConfigFile: 'require.config.js', - name: "WoltLabSuite/_Meta", - out: "WCF.ACP.min.js", - useStrict: true, - preserveLicenseComments: false, - optimize: 'uglify2', - uglify2: {}, - excludeShallow: [ - 'WoltLabSuite/_Meta' - ], - exclude: [ - 'WoltLabSuite/Core/Bootstrap' - ], - rawText: { - 'WoltLabSuite/_Meta': 'define([], function() {});' - }, - onBuildRead: function(moduleName, path, contents) { - if (!process.versions.node) { - throw new Error('You need to run node.js'); - } - - if (moduleName === 'WoltLabSuite/_Meta') { - if (global.allModules == undefined) { - var fs = module.require('fs'), - path = module.require('path'); - global.allModules = []; - - var queue = ['WoltLabSuite/Core/Acp']; - var folder; - while (folder = queue.shift()) { - var files = fs.readdirSync(folder); - for (var i = 0; i < files.length; i++) { - var filename = path.join(folder, files[i]); - - if (path.extname(filename) == '.js') { - global.allModules.push(filename); - } - else if (fs.statSync(filename).isDirectory()) { - queue.push(filename); +(function () { + var config; + config = { + mainConfigFile: 'require.config.js', + name: "WoltLabSuite/_Meta", + out: "WCF.ACP.min.js", + useStrict: true, + preserveLicenseComments: false, + optimize: 'uglify2', + uglify2: {}, + excludeShallow: [ + 'WoltLabSuite/_Meta' + ], + exclude: [ + 'WoltLabSuite/Core/Bootstrap' + ], + rawText: { + 'WoltLabSuite/_Meta': 'define([], function() {});' + }, + onBuildRead: function(moduleName, path, contents) { + if (!process.versions.node) { + throw new Error('You need to run node.js'); + } + + if (moduleName === 'WoltLabSuite/_Meta') { + if (global.allModules == undefined) { + var fs = module.require('fs'), + path = module.require('path'); + global.allModules = []; + + var queue = ['WoltLabSuite/Core/Acp']; + var folder; + while (folder = queue.shift()) { + var files = fs.readdirSync(folder); + for (var i = 0; i < files.length; i++) { + var filename = path.join(folder, files[i]); + + if (path.extname(filename) == '.js') { + global.allModules.push(filename); + } + else if (fs.statSync(filename).isDirectory()) { + queue.push(filename); + } } } } + + return 'define([' + global.allModules.map(function (item) { return "'" + item.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\.js$/, '') + "'"; }).join(', ') + '], function() { });'; } - return 'define([' + global.allModules.map(function (item) { return "'" + item.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\.js$/, '') + "'"; }).join(', ') + '], function() { });'; + return contents; + } + }; + + var _isSupportedBuildUrl = require._isSupportedBuildUrl; + require._isSupportedBuildUrl = function (url) { + var result = _isSupportedBuildUrl(url); + if (!result) return result; + if (Object.keys(config.rawText).map(function (item) { return process.cwd() + '/' + item + '.js'; }).indexOf(url) !== -1) return result; + + var fs = module.require('fs'); + try { + fs.statSync(url); + } + catch (e) { + console.log('Unable to find module:', url, 'ignoring.'); + + return false; } - - return contents; - } -}); + return true; + }; + + return config; +})(); diff --git a/wcfsetup/install/files/js/require.build.js b/wcfsetup/install/files/js/require.build.js index e3f2c1d4b2..a469ff3c3b 100644 --- a/wcfsetup/install/files/js/require.build.js +++ b/wcfsetup/install/files/js/require.build.js @@ -1,62 +1,85 @@ -({ - mainConfigFile: 'require.config.js', - name: "WoltLabSuite/_Meta", - out: "WCF.Core.min.js", - useStrict: true, - preserveLicenseComments: false, - optimize: 'uglify2', - uglify2: {}, - paths: { - "requireLib": "require", - - "jquery": "empty:" - }, - deps: [ - "require.config", - "wcf.globalHelper" - ], - include: [ - "requireLib", - "require.linearExecution" - ], - excludeShallow: [ - 'WoltLabSuite/_Meta' - ], - rawText: { - 'WoltLabSuite/_Meta': 'define([], function() {});' - }, - onBuildRead: function(moduleName, path, contents) { - if (!process.versions.node) { - throw new Error('You need to run node.js'); - } - - if (moduleName === 'WoltLabSuite/_Meta') { - if (global.allModules == undefined) { - var fs = module.require('fs'), - path = module.require('path'); - global.allModules = []; - - var queue = ['WoltLabSuite']; - var folder; - while (folder = queue.shift()) { - var files = fs.readdirSync(folder); - for (var i = 0; i < files.length; i++) { - var filename = path.join(folder, files[i]); - if (filename === 'WoltLabSuite/Core/Acp') continue; - - if (path.extname(filename) == '.js') { - global.allModules.push(filename); - } - else if (fs.statSync(filename).isDirectory()) { - queue.push(filename); +(function () { + var config; + config = { + mainConfigFile: 'require.config.js', + name: "WoltLabSuite/_Meta", + out: "WCF.Core.min.js", + useStrict: true, + preserveLicenseComments: false, + optimize: 'uglify2', + uglify2: {}, + paths: { + "requireLib": "require", + + "jquery": "empty:" + }, + deps: [ + "require.config", + "wcf.globalHelper" + ], + include: [ + "requireLib", + "require.linearExecution" + ], + excludeShallow: [ + 'WoltLabSuite/_Meta' + ], + rawText: { + 'WoltLabSuite/_Meta': 'define([], function() {});' + }, + onBuildRead: function(moduleName, path, contents) { + if (!process.versions.node) { + throw new Error('You need to run node.js'); + } + + if (moduleName === 'WoltLabSuite/_Meta') { + if (global.allModules == undefined) { + var fs = module.require('fs'), + path = module.require('path'); + global.allModules = []; + + var queue = ['WoltLabSuite']; + var folder; + while (folder = queue.shift()) { + var files = fs.readdirSync(folder); + for (var i = 0; i < files.length; i++) { + var filename = path.join(folder, files[i]); + if (filename === 'WoltLabSuite/Core/Acp') continue; + + if (path.extname(filename) == '.js') { + global.allModules.push(filename); + } + else if (fs.statSync(filename).isDirectory()) { + queue.push(filename); + } } } } + + return 'define([' + global.allModules.map(function (item) { return "'" + item.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\.js$/, '') + "'"; }).join(', ') + '], function() { });'; } - return 'define([' + global.allModules.map(function (item) { return "'" + item.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\.js$/, '') + "'"; }).join(', ') + '], function() { });'; + return contents; + } + }; + + var _isSupportedBuildUrl = require._isSupportedBuildUrl; + require._isSupportedBuildUrl = function (url) { + var result = _isSupportedBuildUrl(url); + if (!result) return result; + if (Object.keys(config.rawText).map(function (item) { return process.cwd() + '/' + item + '.js'; }).indexOf(url) !== -1) return result; + + var fs = module.require('fs'); + try { + fs.statSync(url); + } + catch (e) { + console.log('Unable to find module:', url, 'ignoring.'); + + return false; } - - return contents; - } -}); + return true; + }; + + return config; +})(); -- 2.20.1