如何使用 ClosureCompiler.js 加载 npm 包



我想尝试Google Closure Compiler,所以我将它与npm发行版closurecompiler一起使用.js。我正在使用闭包编译器将我的 es6 代码转移到 es5。改成通天塔转译器不是一个选项。

所以我从一些基本的例子开始,这些例子工作得很好,但我坚持导入一些 npm 包。这是我的依赖项,来自我的package.json文件

"dependencies": {
    "body-parser": "~1.5.2",
    "express": "~4.7.2",
    "method-override": "~2.1.2",
    "mongoose": "~3.6.2",
    "morgan": "~1.2.2",
    "vue": "^1.0.16",
    "vue-resource": "^0.7.0"
  }

运行 require 命令,它都可以工作,但如果我运行

import express from 'express'

我收到错误

server.js:4: ERROR - Failed to load module "express"
  import express  from 'express'
  ^

用于进行转译的命令是

ccjs config/*.js server.js --externs=node > dist/server.js && node dist/server.js

我已经尝试过有和没有--externs=node选项,但没有任何变化。请注意,像这样的句子

import database from './config/database'

工作正常,问题仅出在node_modules包上。那么,我怎样才能让这些导入与闭包编译器一起使用呢?

--js_module_root 标志告诉编译器在哪里可以找到模块。默认情况下,它仅在当前目录中查找,因此您可能还需要传递node_modules目录才能完成此操作。

我自己还没有将编译器与节点一起使用,但我认为这应该是您所需要的。如果可行,请在 https://github.com/google/closure-compiler/wiki/JS-Modules 更新文档或在此处发表评论以提醒我们这样做。

诀窍是使用 --js 参数将引用的文件和 package.json 传递给闭包编译器。像这样:

java
 -jar node_modules/google-closure-compiler/compiler.jar
 --compilation_level=ADVANCED
 --process_common_js_modules
 --dependency_mode=STRICT
 --js_output_file='./dist/compiled.js'
 --module_resolution=NODE
 --entry_point=./src/module
 --js='./src/**.js'
 --js='./node_modules/isarray/**.js'
 --js='./node_modules/isarray/**package.json'

查看此处。

然而,对于 express,它很棘手,因为它带来了一堆依赖项,编译器报告了大量的错误。

最新更新