我想尝试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,它很棘手,因为它带来了一堆依赖项,编译器报告了大量的错误。