fixclosure v4.0.1
fixclosure
fixclosure is JavaScript dependency checker/fixer for Closure Library based on ECMAScript AST.
It finds namespaces used in a JavaScript file and insert/remove goog.provide, goog.require, goog.requireType and goog.forwardDeclare automatically.
Install
$ npm install fixclosureUsage
The following code goog.require()s an unused namespace goog.unused, also goog.missing is used but not goog.require()d.
// foo.js (before)
goog.provide("goog.foo.Bar");
goog.require("goog.foo");
goog.require("goog.unused");
goog.foo.Bar = function () {
goog.foo.baz();
goog.missing.require();
};Fix it !
$ npx fixclosure --fix-in-place --namespaces=goog.foo,goog.missing foo.js
File: foo.js
Provided:
- goog.foo.Bar
Required:
- goog.foo
- goog.unused
Missing Require:
- goog.missing
Unnecessary Require:
- goog.unused
FIXED!
Total: 1 files
Passed: 0 files
Fixed: 1 filesgoog.require('goog.unused') is removed and goog.require('goog.missing') is inserted.
// foo.js (fixed)
goog.provide("goog.foo.Bar");
goog.require("goog.foo");
goog.require("goog.missing");
goog.foo.Bar = function () {
goog.foo.baz();
goog.missing.require();
};Rules fixclosure checked
fixclosure checks and fixes:
- Duplicated provide/require/requireType/forwardDeclare
- Missing provide/require/requireType/forwardDeclare
- Unnecessary provide/require/requireType/forwardDeclare
Globbing
The arguments are globbed by globby.
Directories are expanded as **/*.js.
$ fixclosure path/to/dir "foo/bar-*.js"Use with Grunt
Use grunt-fixclosure plugin.
Configuration file
fixclosure loads options from .fixclosurerc config file like:
--provideRoots foo,bar
--replaceMap foo.foobar:foo.foo
--useForwardDeclarefixclosure will find the file in the current directory and, if not found, will move one level up the directory tree all the way up to the filesystem root.
Options
-f or --fix-in-place
If an invalid file is found, fixclosure fixes the file in place.
--config <file>
.fixclosurerc file path.
Specify if your file is not in the search path.
Default: ${process.cwd()}/.fixclosurerc
--provideRoots <roots>
Specify your root namespaces to provide. Default is goog.
Comma separated list.
--namespaces <namespaces>
Specify method or property exported as a namespace itself like goog.dispose.
Comma separated list.
--replaceMap <map>
Replace method or property to namespace mapping like goog.disposeAll:goog.dispose.
Comma separated list of colon separated pairs like foo.bar1:foo.bar2,foo.bar3:foo.bar4.
--useForwardDeclare
Use goog.forwardDeclare() instead of goog.requireType() for types used only in JSDoc.
Default: false
--depsJs <files>
Load namespace methods from deps.js files separated by comma. You can generate deps.js with google-closure-deps or duck.
--showSuccess
Show not only failed files but also passed files.
--no-color
Disable color output.
Inline hint
fixclosure reads "hint" for lint from special comments in your code.
ignore
fixclosure doesn't remove any goog.provide and goog.require with this hint.
goog.provide("goog.foo"); // fixclosure: ignore
goog.require("goog.bar"); // fixclosure: ignoreIn the above, goog.provide('goog.foo') will not removed by fixclosure even if it isn't provided in the file.
Also goog.require('goog.bar') will not removed if it isn't used.
The hint affects only same line.
Useful in module declaration.
suppressRequire
Suppress goog.require auto insertion.
// fixclosure: suppressRequire
goog.foo.bar();In the above, goog.require('goog.foo') will not inserted.
The hint affects only next line.
This is useful to workaround cyclic reference.
suppressProvide
Suppress goog.provide auto insertion.
// fixclosure: suppressProvide
goog.Foo = function () {};In the above, goog.provide('goog.Foo') will not inserted.
The hint affects only next line.
Migration from v1 to v2
- Old Node.js versions were no longer supported, use Node.js v10 or higher.
--namespaceMethodswas deprecated, use--namespaces.- Deprecated
--rootswas removed, use--provideRoots. --requireRootswas removed because fixclosure v2 no longer detects required namespaces heuristically. Use--namespacesor--depsJsto detect them. They can detect the namespaces correctly.- Types used only in JSDoc are reported as errors, while previously only types of
@extendsin@interfaceare reported. Addgoog.requireType()orgoog.fowardDeclare().
License
MIT License: Teppei Sato teppeis@gmail.com
3 years ago
3 years ago
3 years ago
3 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
13 years ago
13 years ago
13 years ago
13 years ago
13 years ago
13 years ago