3

我正在尝试在类似于资产管道中使用Railsfrom 。我想要一个在所有模块中都可用的全局变量。@rails/ujswebpacker ts-loaderRailsRails

目前,我可以通过在每个模块中导入来规避问题,但是,为了解决问题,我们如何制作一个ts-loader不会哭泣的全局模块。

首先,我已经将 jquery 配置为$. 我不明白为什么@rails/ujsasRails没有类似的工作。这是我的(简化的)配置:

// 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 = {
  rules: [
    {
      ...
      loader: 'ts-loader',
      options: { transpileOnly: true },
    },
    ...
  ],
  resolve: { plugins: ... },
}
// config/webpack/environment.js

...

// Globals
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
  $: 'jquery',
  Rails: ['@rails/ujs'], /* also tried Rails: '@rails/ujs', */
}))
...

// 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)
$ bin/webpack --display errors-only
TS2304: Cannot find name 'Rails'

相关:这个类似的问题不是我的问题的重复。这个问题没有解决 Typescript。我遵循的答案也没有。但是,它确实修复了我的eslint. 我认为这是一个ts-loader配置问题。

4

0 回答 0