如何使用webpacker使Rails 6项目中的页面可以访问javascript函数?

如何使用webpacker使Rails 6项目中的页面可以访问javascript函数?,javascript,ruby-on-rails,node.js,webpacker,ruby-on-rails-6,Javascript,Ruby On Rails,Node.js,Webpacker,Ruby On Rails 6,在一个Rails项目中,我正在尝试从使用旧的链轮资产管道切换到使用webpacker。我已经设置了以下测试文件: app/javascript/lib/foo.js 函数foo(){ console.log('foo') } console.log('bar')) app/javascript/packs/application.js //一些标准Rails JS需要 // ... require('lib/foo') app/views/test/index.html foo() 在我

在一个Rails项目中,我正在尝试从使用旧的链轮资产管道切换到使用webpacker。我已经设置了以下测试文件:

app/javascript/lib/foo.js

函数foo(){
console.log('foo')
}
console.log('bar'))
app/javascript/packs/application.js

//一些标准Rails JS需要
// ...
require('lib/foo')
app/views/test/index.html


foo()
在我的layouts/application.html.erb中


当我在浏览器中转到该页面时,我看到“bar”被记录到我的控制台上,然后是

“引用错误:未定义foo”

我尝试了几种不同的方法来设置我的文件,比如使用import而不是require,或者在我的js文件中设置
module.exports=foo
export default foo
,但是我没有幸运地绕过上面的错误消息


简而言之,如何将javascript文件从链轮移动到webpacker?如果可能,如何在不更改现有javascript代码的情况下执行此操作?

您需要将函数和模块作为命名导出从
应用程序中导出。js
打包并扩展Webpack config
output
,以指定库名和目标
var
(或者
窗口
也可以工作)

//config/webpack/environment.js
environment.config.merge({
输出:{
库:['Packs','[name]',//从应用程序包导出到“Packs.application”
libraryTarget:'var',
}
})
//app/javascript/packs/application.js
从“../lib/foo”导入foo
出口{
福
}

$(文档).ready(函数(){
Packs.application.foo();
});

名称是任意的。使用
[name]
占位符是可选的,但如果您使用多个“包”,则允许您导出到单独的模块。

您的意思是webpack系统中包含的每个javascript模块都需要以这种方式导出?仅需要从包外显式引用的模块,即。,从全局范围来看。我真的不认为这比用一个单独的
javascript\u include\u标记
行包含它更容易,但OP询问的是网页包,所以+1。@DavidDombrowsky能
javascript\u include\u标记
使用javascript模块吗?