- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Webpack 世界的新手。
我遵循了一些教程,并在我的 Wordpress 主题文件夹中安装了一个新的 Webpack,一切正常。
我的想法是构建 2 js。一个用于我的自定义 js 脚本 (public.js),一个包含所有第三方库 (vendor.js)
现在我开始编写关于我的新主题的代码,我需要包含一些第三方库。
例如 chartjs.js,它使用 Chart 命令来启动一个新的图形图表。
在我的 webpack.config.js 文件中,我创建了两个入口点:
vendor :[第三个 js 库的数组],
公共(public):'./src/js/public.js'
但在控制台中我得到了 referenceError: Chart is not defined.
我知道我需要在主 js (public.js) 中导入库,但是通过这种方式,Webpack 在我编写自定义脚本的文件中使用完整的 Chart 库代码构建 public.js point vendor.js 没有意义存在。
所以这是我的问题。
有一种方法可以在 vendor.js 中包含第三方库,并在 public.js 中包含我的自定义脚本,而无需在 public.js 中导入 js 库吗?
这些是我的具有导入功能的文件:
Webpack.config.js
const path = require('path');
const webpack = require('webpack');
const webpackMerge = require('webpack-merge');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const modeConfig = env => require(`./configs/${env.mode}.js`)(env);
module.exports = env => {
return webpackMerge(
{
mode: env.mode,
entry: {
vendor: ['./node_modules/jquery/dist/jquery.min.js','./node_modules/lottie-web/build/player/lottie.min.js'],
public: './src/js/public.js',
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'assets/js/')
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel-loader',
},
{
test: /\.(png|jpe?g|gif|svg)$/,
use: [
{
loader: 'file-loader',
options: {
name: '/[name].[ext]',
outputPath: '../../assets/img',
},
}
],
},
],
},
resolve: {
alias: {
charts: path.resolve(__dirname, 'node_modules/lottie-web/build/player/lottie.min.js'),
}
},
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
}),
new CleanWebpackPlugin(),
]
},
modeConfig(env),
)
};
包.json
{
"name": "wolftrick",
"version": "1.0.0",
"description": "Package file for Wolftrick website",
"scripts": {
"dev": "webpack --watch --env.mode development",
"build": "webpack -p --env.mode production"
},
"author": "Wolftrick",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.5.4",
"@babel/preset-env": "^7.5.4",
"autoprefixer": "^9.6.1",
"babel-loader": "^8.0.6",
"browser-sync": "^2.26.7",
"browser-sync-webpack-plugin": "^2.2.2",
"bulma": "^0.7.5",
"clean-webpack-plugin": "^3.0.0",
"cross-env": "^5.2.0",
"css-loader": "^3.0.0",
"file-loader": "^4.1.0",
"mini-css-extract-plugin": "^0.8.0",
"node-sass": "^4.12.0",
"postcss-loader": "^3.0.0",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"url-loader": "^2.1.0",
"webpack": "^4.35.3",
"webpack-cli": "^3.3.6",
"webpack-dev-server": "^3.7.2",
"webpack-merge": "^4.2.1"
},
"browserslist": [
"> 0.5%",
"last 2 versions",
"Firefox ESR",
"android 4",
"opera 12",
"ie >= 10",
"ie_mob >= 10",
"ff >= 30",
"chrome >= 34",
"safari >= 7",
"opera >= 23",
"ios >= 7",
"android >= 4.4",
"bb >= 10",
"not dead"
],
"dependencies": {
"jquery": "^3.4.1",
"chart": "^2.8.0"
}
}
公共(public).js
import '../scss/style.scss';
import Chart from 'charts';
'use strict';
var ctx = document.getElementById('myChart');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
使用此代码 Chart 可以完美运行,但我将所有 Chart.js 代码都放在 public.js 中(我想没有任何理由将库放在 vendor 入口点中)。
我希望有一种方法可以将所有 chart.js 代码放在 vendor.js 中,并有机会在 public.js 中调用 Chart 实例,而无需导入完整的库。
非常感谢你,我希望我能很好地解释自己,因为我的英语不好。
最佳答案
externals: { chart: 'Chart' },
<canvas id="myChart" width="400" height="400"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"></script>
let ctx = document.getElementById('myChart'); let myChart = new Chart(ctx, {
type: 'bar',...
使用 chart.js 库的示例 -> look
我误解了你的问题。您不需要将 vendor 添加到条目中。我举个例子。
我有三个文件。
a.js
import Chart from 'chart.js';
let ctx = document.getElementById('myChart');
let myChart = new Chart(ctx, {
type: 'bar',
...
b.js
import Chart from 'chart.js';
import $ from "jquery";
let ctx = document.getElementById('myChart');
let myChart = new Chart(ctx, {
type: 'bar',
...
c.js
console.log('next site');
webpack.config.js
entry: {
pagea: './a.js',
pageb: './b.js',
pagec: './c.js'
},
optimization: {
splitChunks: {
chunks: "all",
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10,
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
}
},
因此,您将拥有:
pagea.js
pageb.js
pagec.js
vendors~pagea~pageb.js // chart.js for pagea + pageb
vendors~pageb.js // jquery for pageb
关于javascript - 在 Wordpress 上使用 Webpack 从网站 js 脚本中拆分 vendor 第三方库 js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57150395/
像这样的webpack.config.js文件可以导出多个配置: module.exports = [{entry: 'a.js'}, {entry: 'b.js'}]; 当我调用 webpack 时
我正在尝试在 webpack 配置文件中设置 browserslist,但不知道如何执行此操作。 在 webpack.config 中尝试了以下内容: 'use strict'; module.exp
If you are using webpack v5 or above you do not need to install this plugin. Webpack v5 comes with t
使用webpack 2时,为什么需要以相反的顺序为“use:”键添加加载程序?为什么不从头到尾,从左到右列出每个加载器?有什么理由吗? 最佳答案 看起来像是一种约定,它很容易成为匹配执行顺序和源顺序的
当我 web pack 的时候 --watch --config webpack.production.config.js --mode production 我有这个错误: ERROR in Typ
我有一个使用 Twig 进行模板的项目。其中的所有数据都是静态的,但为了清楚起见,我已经在其他 Twig 文件中分离出部分页面(否则一个文件中会有数百行标记)。 我使用 webpack 作为构建工具,
我使用 cli 创建了一个 vue.js 项目。我使用了 webpack 模板。我已经为此工作了几天,并且工作顺利。 现在我需要向项目添加一个 npm 包。这个包建议我对 webpack 配置进行一些
我正在使用运行“node_modules/.bin/webpack”,但我知道可以配置路径以便您只需键入“webpack ”。不过,我找不到方法。 :/ 最佳答案 如果你安装一个包 globally
我正在服务器渲染我的 react 应用程序,如下所示: export default ({ clientStats }: { clientStats: any }) => async (req: Re
我试过包含一个通配符,它破坏了构建;和多个 favicon字段条目,它只使用最后一个输入。我如何支持使用此插件包含多个网站图标文件? 最佳答案 您还需要包括 favicons-webpack-pl
我正在使用 webpack 编译我的 Reactjs 文件。在我的项目中,我需要对后端进行 API 调用。 现在我有 3 个环境,分别是本地环境、开发环境和生产环境。 所以我有一个constants.
我正在将所有文件构建到“dist”文件夹中。 Dist ->index.html ->bundle.js 我已将配置设置为在我需要的特定端口上运行。 { entry: './src/ind
我想使用由 Closure Compiler 使用 Webpack 生成的 SourceMap,但我不知道该怎么做。 这是我的 webpack 配置: const ClosureCompiler =
有没有办法接收当前文件路径,就像在 requirejs 中一样? define(['module'], function (module) { console.log(module.uri)
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我是 webpack 的初学者用户。我想写一个webpack.config.js建立我的项目。但是有什么不对的地方! 这是我的 package.json (已安装所有依赖项): { "name":
我从这里开始:https://github.com/vuejs/vue-cli 我不确定它是否使用 Webpack。 包含/使用 webpack 的项目将包含哪些文件? 最佳答案 如果您的项目正在使用
Webpack,你将要了我的命。 html-webpack-plugin 在生产中运行良好。 'dist' 文件夹加载了我的 html 模板和插入的包。好酷。 但是,webpack-dev-serve
想象一下我有一个这样的项目: /moduleA/src... /moduleB/src... /mainApp/src... 每个模块和主应用程序都有一个单独的 webpack.config。模块是库
根据 webpack 文档,我尝试将 UglifyJSPlugin 添加到 webpack 4 项目中,但我仍然在我的包中看到死代码甚至注释,这让我认为我的 uglify 插件配置没有被使用。 Lin
我是一名优秀的程序员,十分优秀!