从Node脚本生成package.json,读取依赖关系

时间:2019-04-10 15:27:33

标签: node.js npm webpack package.json

在过去的几年中,我的团队已经制作了大约300个中小型Node应用程序,我正在尝试对其进行整理和组织。可以说我珍爱的助手并不总是将tf.keras.preprocessing.image.ImageDataGenerator标志与--save一起使用,因此npm install文件通常不能反映所有的依赖关系。在其他时候,它们包含实际上未被使用的软件包,因为有人DID使用package.json,然后改变了对使用该软件包的想法。

所有应用程序都使用相同的文件名约定,因此我们至少对此表示感谢。

我可以编写一个脚本,该脚本以文本文件的形式读取源代码,使用正则表达式查找--saverequire,并获得程序包名称。我可以自己处理版本。但这似乎是微不足道的和低效的。

当在项目上运行import时,我注意到编译器处理代码,检测到任何非法语法,更重要的是,发现了由于不存在而无法导入的任何软件包已安装。

通常,我会在执行未知脚本的过程中感到恼火,但是由于这些都是由已知实体编写的脚本,因此我不担心不法行为。我主要不清楚像webpack这样的程序解析webpack文件而不必执行该文件,并返回带有行号的特定错误的情况。

我什至不必自动化将丢失的依赖项添加到.js文件的过程-300个应用程序中的许多都已正确构建。但这仍然可以帮助我迅速发现丢失的内容。

运行脚本以查看其是否工作涉及VM?还是像从另一个脚本运行脚本一样简单?自然,这些应用程序本身不是软件包,因此仅尝试package.json似乎不起作用。也许它使用JSLint?

1 个答案:

答案 0 :(得分:1)

Webpack不会运行任何脚本来运行您的代码以确保其正常运行。它使用Babel,后者是一个编译器(也不会运行您的代码)。

编译器的工作方式是扫描代码,并确保所有语法在语法上都是正确的,例如匹配的括号或花括号,是否声明了所使用的变量以及使用静态类型的语言,类型是否正确。在执行此操作时/之后,他们吐出目标系统可以使用的代码。对于C语言,编译器将根据您指定的选项,将您的C代码转换为机器代码或汇编代码。

通常,编译器和编译器之间的区别在于,编译器向下(朝机器级别)翻译代码,而编译器则水平翻译代码。考虑打字稿-> Javascript,或者在本例中为ES6 + Javascript-> ES [compatible] Javascript。这意味着,为了使Babel将您的ES6代码转换为更兼容的内容,它必须通读您的所有文件并执行基本的完整性检查。具体来说,如果看到您正在导入代码,它将尝试访问模块/文件,因为这就是该指令。如果不能,则会抛出错误。

这也是为什么您会看到编译错误而不是运行时错误的原因,类似于其他语言。如果Babel实际运行您的代码以检查错误,则它也可能会发现运行时错误。但是,代码具有许多执行分支,因此找到这些分支然后设置条件使其执行是一项艰巨的任务。这就是我们拥有测试工具的原因。


要更直接地解决您的问题/疑虑,请执行以下操作:

  

运行脚本以查看其是否正常运行涉及虚拟机?

不是

  

还是从另一个脚本运行脚本一样简单?

不是

  

我主要不清楚像webpack这样的程序解析.js文件而不必执行它,并返回带有行号的特定错误的情况。

它使用Babel,并且

  

但这似乎不够优雅和低效。

不幸的是,这实际上是Babel所做的。


注意

我仔细检查了Webpack文档,发现它们确实有自己的转译器,但它仅处理导入/导出语句,并建议使用另一个转译器(如Babel或Bublé)来转译其余部分,这就是我说的意思请参阅Webpack如何使用Babel。

请参见getting started