Ruby on rails 在TS模块中使用全局Rails UJS(带webpacker的Rails)
我试图在Ruby on rails 在TS模块中使用全局Rails UJS(带webpacker的Rails),ruby-on-rails,webpack,webpacker,ts-loader,rails-ujs,Ruby On Rails,Webpack,Webpacker,Ts Loader,Rails Ujs,我试图在webpacker
webpacker
中使用Rails
中的Rails
,类似于资产管道中的Rails
。我想要一个全局变量Rails
在所有模块中都可用
现在,我可以通过在每个模块中导入它来规避这个问题,但是,为了解决这个问题,我们如何制作一个ts loader
不会抱怨的全局模块呢
首先,我已经将jquery配置为$
。我不明白为什么@rails/ujs
和rails
的工作方式不一样。以下是我的(简化)配置:
// tsconfig.json
{
"compilerOptions": {
...
"lib": ["dom", "es2020"],
"module": "esnext",
"moduleResolution": "node",
"target": "es5"
},
"exclude": ["**/*.spec.ts", "node_modules", "vendor", "public"]
...
}
//config/webpack/loaders/typescript.js
...
module.exports={
规则:[
{
...
加载器:“ts加载器”,
选项:{transpileOnly:true},
},
...
],
解析:{插件:…},
}
//config/webpack/environment.js
...
//全球的
environment.plugins.prepend('Provide',new webpack.ProvidePlugin({
$:“jquery”,
Rails:['@Rails/ujs'],/*还尝试了Rails:'@Rails/ujs']*/
}))
...
$bin/webpack--仅显示错误
TS2304:找不到名称“Rails”
相关:类似的问题并不是我问题的重复。这个问题不涉及打字脚本。我遵循的答案也是如此。但是,它确实修复了我的
eslint
。我认为这是一个ts加载器config问题。我看到jquery和Rails UJS之间的唯一区别是jquery只是简单地使用,但是@Rails/UJS
在顶部模块中有一个require(@Rails/UJS”).start()
行。你找到解决这个问题的方法了吗,@RWDJ?@s(u dolan我没有。我最后做了进口生意。
// app/.../packs/application/index.ts
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
import './rails-inquirer'
// app/.../packs/application/rails-inquirer/index.ts
console.log(Rails)