我有一个src/main/webapp/com/mycompany/frontend/page/index.js
取决于target/webjars/log4javascript/1.4.10/log4javascript.js
的项目。
我已将package.json
与index.js
一起添加以下内容:
{
"browser":
{
"log4javascript": "../../../../../../../target/webjars/log4javascript/1.4.10/log4javascript.js"
}
}
我在target
目录中有很多其他依赖项。有没有办法让我避免为每个依赖项重复../../../../../../../target/
?
答案 0 :(得分:0)
查看this article中的使用非相对路径部分。
您可以使用grunt-browserify的aliasMapping选项指定应用的根目录:
aliasMappings: [{
cwd: 'src',
dest: 'myApp',
src: ['**/*.js']
}]
然后你可以直接引用根路径中的所有内容,而不必使用任何可怕的../
:
require("myApp/target/webjars/log4javascript/1.4.10/log4javascript.js")
当然,这并不能解决它仍然是一个很长的道路的问题。
这篇文章的下一段提出了一个非常好的观点:如果你在应用程序的另一端调用了这样的东西,这是一个很好的迹象,表明事情可能没有正确构建。
您可以将功能拆分为更小的模块吗?也许让log4javascript成为自己的模块?
在下面的讨论中添加我的答案:
如果log4javascript在您的package.json文件中作为浏览器(非NPM)模块,您应该只需要require('log4javascript')
答案 1 :(得分:0)
一个选项是将包含本地模块或符号链接的目录放在node_modules
中,例如node_modules/app
,然后将您的需求引用为app/...
,例如{
"browser":
{
"log4javascript": "app/target/webjars/log4javascript/1.4.10/log4javascript.js"
}
}
。我相信这会起作用
node_modules/log4javascript
或者您可以根据需要构建它,例如/whatever/target/webjars/log4javascript
(如果您有符号链接,可以指向require()
)。
这使得browserify('app/entry').transform(whatever)
能够以与npm模块相同的方式找到它,而不将其发布到npm。这样做的主要缺点是它破坏了以编程方式配置变换的能力,例如:使用app/entry
,node_modules
和依赖关系图中{{1}}下的其他文件将不会应用转换。