带有@types定义,Webpack,Foundation,jQuery的Typescript 2.0.3没有定义

时间:2016-10-16 07:40:55

标签: jquery typescript types webpack zurb-foundation

我正在尝试使用带有@types定义的TypeScript 2.0.3构建一个应用程序,并希望使用基础站点​​并将所有内容与webpack捆绑在一起。 一旦我尝试导入基础,我得到控制台错误消息,即jQuery未定义。 当我不导入基础时,jQuery工作正常!

如果有人能够解释,我做错了什么以及如何加载,例如来自.ts文件的基础工具提示,这真的很棒。

您可以在此处查看完整的来源:https://github.com/Der-Alex/typescript-foundation-webpack

我在做什么是基本的: 我有一个./app文件夹。里面有app.ts,main.scss和index.html。

我安装了以下npm包:

...
"dependencies": {
  "@types/foundation-sites": "^6.1.28",
  "@types/jquery": "^2.0.33",
  "css-loader": "^0.25.0",
  "foundation-sites": "^6.2.3",
  "jquery": "^2.1.0",
  "node-sass": "^3.10.1",
  "sass-loader": "^4.0.2",
  "style-loader": "^0.13.1",
  "ts-loader": "^0.9.1",
  "typescript": "^2.0.3",
  "webpack": "^1.13.2"
},
"devDependencies": {
  "webpack-dev-server": "^1.16.2"
}

我的webpack.config.js:

module.exports = {
  entry: './app/app.ts',
  output: {
    filename: './app/bundle.js'
  },
  resolve: {
    extensions: ['', '.ts', '.js']
  },
  module: {
    loaders: [
      {
        test: /\.ts$/, loader: 'ts-loader'
      },
      {
        test: /\.scss/, loaders: ['style', 'css', 'sass']
      }
    ]
  }
};

我的./app/app.ts:

import './main.scss';
import * as $ from 'jquery';
import 'foundation-sites';

$(() => {
  $(document).foundation();
});

没有transile / compile错误。当我运行webpack-dev-server并在浏览器中检查结果时,样式已加载,但是我收到此错误消息“jQuery未定义”。浏览器理解$,但例如不是$(...)。on(...); 那么我做错了什么?

3 个答案:

答案 0 :(得分:1)

我认为在这种情况下问题是由于如果使用webpack导入jQuery(默认情况下为CommonJS样式),它不会创建jQuery所依赖的全局foundation-sites变量。您可以尝试在代码中公开它,看看它是否解决了问题:

import * as $ from 'jquery'; window.jQuery = $; import 'foundation-sites';

答案 1 :(得分:0)

您应该将它添加到tsconfig.json文件的compilerOptions中:

"typeRoots": [
    "node_modules/@types"
]

答案 2 :(得分:0)

最后我得到它只与webpack一起工作! 通过开发同事的一些重要信息,我发现帖子: Managing jQuery plugin dependency in webpack

这给了我以下提示:

  1. 在全局命名空间

    下需要jquery

    global.jQuery = require('jquery');

  2. 添加别名

    resolve: { extensions: ['', '.ts', '.js'], alias: { jquery: "jquery/src/jquery" } }

  3. 添加$和jQuery作为插件

    new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery" })

  4. 这使jQuery成为一个全局对象,可以在.ts文件中使用,如下所示:

    import * as $ from 'jquery';
    $(document).foundation();
    

    我认为,这是使用webpack加载jQuery的最简洁方法。 如果这个答案被投了票,我真的很感激。