【问题标题】:Import a file without actually importing it导入文件而不实际导入它
【发布时间】:2019-01-05 01:02:16
【问题描述】:

我正在创建一个包,它将从用户那里获取一个 JavaScript 对象并用它做一些事情。所有用户需要做的就是写文件名。像这样node package.js file.js。

我使用这样的东西:

  const object = require(process.argv[2]);

但是 linter 给了我这个 import/no-dynamic-require 并且 webpack 也会抛出一个警告,比如:

30:14-27 Critical dependency: the request of a dependency is an expression

那么您认为使用该文件的最佳方式是什么?

【问题讨论】:

  • 您可以使用fs.readFile() 和eval() 自己动态加载和运行代码。不知道你真正需要什么,因为我不知道你真正想要完成什么。
  • 您的错误信息暗示您可能正在使用类似 webpack 的东西。如果是这种情况,它会在捆绑时分析所有依赖项,因此您不能将变量与 require() 一起使用,因为它会预先捆绑您导入的所有内容。
  • 请描述您是如何捆绑和运行此代码的?如果您不使用捆绑程序并且在服务器上(而不是在浏览器中)运行,则可以使用带有 require() 的表达式。

标签: javascript node.js import require fs


【解决方案1】:

您可以执行以下操作:

//TODO: copy contents of input file specified to temp file myObscurelyNamedTempFile.js

const object = require('./myObscurelyNamedTempFile.js');

//TODO: delete temp file after package completes its work

在包文档中,警告用户不要创建临时名称的文件

【讨论】:

  • 如果 OP 使用 webPack 之类的东西在编译时(而不是在运行时)分析依赖关系,看起来它们可能是基于错误的,那么这将不起作用,因为它们会得到临时文件的静态版本,而不是新编写的版本。
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 2022-11-27
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多