我有一个要使用Closure
Compiler编译的Node.js项目。我不希望它在浏览器中运行/使用browserify。我主要想要类型检查的实用程序。我最初使用以下命令使编译器正常工作:
java -jar compiler.jar -W VERBOSE
--language_in ECMASCRIPT5_STRICT
--externs closure-externs.js
--js="lib/**.js"
其中closure-externs.js
手动定义的变量和我是从Node.js的一个相当原始的方式使用该功能:
// closure-externs.js
/** @constructor */function Buffer(something){}
function require(path){}
var process = {};
[...]
事实证明,这只能通过运气来实现。文件之间没有依赖关系跟踪,因此您可能会遇到以下情况:返回类型{Foo}
,并且编译器会抱怨该类型不存在(取决于计算机,取决于编译顺序)。然后我发现我做错了所有事情,应该使用它,--process_common_js_modules
因此编译器将在I进行依赖项跟踪require("foo")
。我目前正在像这样调用编译器:
java -jar compiler.jar -W VERBOSE
--language_in ECMASCRIPT5_STRICT
--externs externs/fs.js
--js="lib/**.js"
--process_common_js_modules
--common_js_entry_module app.js
但这失败了:
ERROR - required entry point "module$crypto" never provided
ERROR - required entry point "module$dgram" never provided
ERROR - required entry point "module$extend" never provided
ERROR - required entry point "module$fs" never provided
ERROR - required entry point "module$net" never provided
ERROR - required entry point "module$q" never provided
这些模块中的一些是Node.js的本地模块(例如fs
),而其他模块则包含在node_modules
like中q
。我不想通过编译器运行这些外部模块,所以我知道我需要externs
为它们设置文件。我知道对于常见的Node.js
externs 有https://github.com/dcodeIO/node.js-closure-compiler-
externs,我知道如何在编译器上调用它们,但是由于某些原因,当我执行类似操作时--externs externs/fs.js
错误module$fs
仍然存在。我究竟做错了什么?
我知道还有其他类似的标志--module
,--common_js_module_path_prefix
但是我不确定是否需要使用它们来使它正常工作。我的Google-
fu无法在此处针对正确的咒语提出任何答案。:(
问题是您希望编译器以某种方式认识到某些require
调用是内部的,即所需的模块应由编译器作为源进行处理,而其他模块是外部的,因此应单独放置。当前没有一个很好的方法来处理这种情况。
在这种情况下,您将完全省略require
对外部模块的任何语句。编译器只会处理带有内部require语句和模块的代码。编译之后,您可以在外部require语句之前添加:
var crypto = require('crypto');
console.log(crypto);
因为crypto
是在外部声明的,所以编译器将正确识别类型和符号名称。
当--process_common_js_modules
指定时,编译器可以识别require
的语句,并以类似的方式扩大他们的宏在其他语言的工作方式。通过别名化require
应保留在外部的语句,编译器将无法识别它们,因此不会展开它们。
var externalRequire = require;
/** @suppress {duplicate} this is already defined in externs */
var crypto = externalRequire('crypto');
console.log(crypto)
我需要这样的东西: 当然,我认为只有内置数字类型的向量才能传递给函数。 编译器告诉我,我需要为Vec提供FromIterator的trait trait
正确地注入了值。但是,变量必须是可选的,它作为命令行参数传入(然后使用SimpleCommandLinePropertySource将其添加到Spring上下文中),并且这个参数并不总是存在。 为了提供默认值,我尝试了以下两种方法: 但是在每种情况下,冒号后面的默认参数都被注入,即使存在实际值--这似乎覆盖了Spring应该注入的内容。
我使用的是npm版本5.4。2,我有一些node_模块,现在是3。x npm模块行为是指在包中未定义节点\模块目录中的模块。json,然后npm删除节点_模块中的模块。 > 若使用“npm安装”添加新模块,我不想覆盖该包。json文件。 如何做到这一点?有国旗吗。npmrc? 关于,, -M-
我想在groovy脚本中定义一个类,我可以通过SoapUI中的其他groovy脚本重用该类。 我一直试图在TestSuite属性中定义我的类,但没有成功。我希望避免在JAR中定义类,因为我们在团队中工作,每个人都必须在他们的SoapUI中导入JAR才能运行我的测试。我使用SoapUI 3.6.1 以下是我的TestSuite的制作方式: 为了简化me测试,我在“Test1”中定义了一个类,我想在“
我正在我的工作空间中试验ESLint,我对缩进规则有点困惑。 以下是我的缩进设置规则: 文档中只说明了只有两个选项:空格数的正数和“tab”。 我的问题是如何定义4的标签大小,而不仅仅是“标签”?可以使用缩进规则吗? 我正在使用 vs 代码。
那么不能将父版本定义为maven属性吗?