我有一个大约15k行代码的JS应用程序(即NetSuite应用程序),采用旧式全局方式编写。该应用程序由26个文件组成,它们之间的依赖关系完全不清楚。
目标是将应用程序优雅地重构为较小的模块。通过“优雅”,我的意思是在较长时间内不会破坏或锁定应用程序,而是在完成每个块后,应用程序仍然可用。
我在这里的想法是将我们现有的所有JS文件连接到单个文件束中。之后,可以将一些代码提取到模块中。遗留代码可以开始导入它。模块和导入应该使用webpack\whatever进行转译,而遗留代码仍然保持全局样式。最后,所有这些都打包到单个JS文件中并部署。
我的问题是
- 也许有更好的方法吗?这听起来像是一个典型的问题
- 是否有任何可用的工具支持我的方法?
我尝试了webpack,但我没有成功地得到我想要的结果。由于需要导入\导出的方法\变量数量,因此export-loader
和resolve-loader
不是选项。
例子
现在的代码看起来像
function someGlobalFunction() {
...
}
var myVar = 'something';
// and other 15k lines in 26 files like this
我理想中想要实现的是:
function define(...) { /* function to define a module */ }
function require(moduleName) { /* function to import a module */ }
// block with my refactored out module definitions
define('module1', function () {
// extracted modularised code goes here
});
define('module2', function () {
// extracted modularised code goes here
});
// further down goes legacy code, which can import new modules
var myModule = require('myNewModule');
function myGlobalLegacyFunction() {
// use myModule
}