![](/img/trans.png)
[英]How to include Third party javascript library in angular2 webpack typescript
[英]include third party library in webpack
我試圖使用webpack將插件( freezeframe插件 )包含到我的應用程序中,但我無法理解如何操作。 我從我的應用程序本地提供此文件,而不是從cdn或npm / bower。 我已經搜遍了所有嘗試解決這個問題,但一直無法接近。
我的webpack文件如下所示:
const webpack = require('webpack');
const conf = require('./gulp.conf');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const autoprefixer = require('autoprefixer');
module.exports = {
module: {
preLoaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'eslint'
}
],
loaders: [
{
test: /.json$/,
loaders: [
'json'
]
},
{
test: /\.gif$/,
loader: 'url-loader',
query: { mimetype: 'image/gif' }
},
{
test: /\.svg$/,
loader: 'svg-loader?pngScale=2'
},
{
test: /\.(eot|woff|woff2|ttf|svg|png|jpg)$/,
loader: 'url-loader?limit=30000&name=[name]-[hash].[ext]'
},
{
test: /\.(css|scss)$/,
loaders: [
'style',
'css',
'sass',
'postcss'
]
},
{
test: /\.js$/,
exclude: /node_modules/,
loaders: [
'babel',
]
},
{
test: /.vue$/,
loaders: [
'vue'
]
}
]
},
vue: {
postcss: [
require('autoprefixer')({
browsers: [
'Android >= 2.3',
'BlackBerry >= 7',
'Chrome >= 9',
'Firefox >= 4',
'Explorer >= 9',
'iOS >= 5',
'Opera >= 11',
'Safari >= 5',
'OperaMobile >= 11',
'OperaMini >= 6',
'ChromeAndroid >= 9',
'FirefoxAndroid >= 4',
'ExplorerMobile >= 9'
]
}),
]
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.NoErrorsPlugin(),
new HtmlWebpackPlugin({
template: conf.path.src('index.html')
}),
new webpack.ProvidePlugin({
$: 'jquery',
jquery: 'jquery',
'window.jQuery': 'jquery',
jQuery: 'jquery',
slick: 'slick-carousel'
})
],
resolve: {
extensions: ['', '.js', '.css', '.scss'],
alias: {
'jQuery': path.join(__dirname, 'node_modules', 'jquery', 'dist', 'jquery')
}
},
postcss: () => [autoprefixer({
browsers: [
'Android >= 2.3',
'BlackBerry >= 7',
'Chrome >= 9',
'Firefox >= 4',
'Explorer >= 9',
'iOS >= 5',
'Opera >= 11',
'Safari >= 5',
'OperaMobile >= 11',
'OperaMini >= 6',
'ChromeAndroid >= 9',
'FirefoxAndroid >= 4',
'ExplorerMobile >= 9'
]
})],
debug: true,
devtool: 'source-map',
output: {
path: path.join(process.cwd(), conf.paths.tmp),
filename: 'index.js'
},
entry: `./${conf.path.src('index')}`
};
我以為我寫了require('./assets/freezeframe/freezeframe.js');
在我的vue組件中,但它然后抱怨jquery沒有定義。 我通過npm安裝了jquery,我已經在使用另一個使用jquery的插件,如下所示:
import 'slick-carousel';
const imagesLoaded = require('imagesloaded');
export default {
name: 'Slider',
props: ['images', 'component'],
mounted () {
var that = this;
$(function() {
imagesLoaded('.js-component-slider',() => {
$(that.$el).slick({
adaptiveHeight: true,
infinite: false
});
});
});
}
}
我現在不知道該怎么做。 我不想只在我的index.html的頂部/底部包含另一個jquery和插件文件,因為我希望它捆綁在一起。
唯一的另一個痛苦的事情是這個插件不是在npm而且我不使用涼亭。
更新:
我已經看到了這個問題add-js-file但是我已經嘗試過對插件這樣做了但仍然得到一個錯誤,它不包括在我需要時('nameoffile')
所以在搜索了一整天之后我發現我必須使用module.export來填充插件。 填充插件意味着我可以這樣寫:你還需要安裝exports-loader
const freezeframe = require("exports?freezeframe!./assets/freezeframe/freezeframe.js");
在我的vue文件中。 然后,當我在index.html中添加它時,我就像之前一樣使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.