You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Greeter.jsmodule.exports=function(){vargreet=document.createElement("div");greet.textContent="Hi there and greetings!";console.log("test");returngreet;};
// Greeter.jsmodule.exports=function(){vargreet=document.createElement("div");greet.textContent="Hi there and greetings!";console.log("test2");returngreet;};
可以把上面的代码用 ES6 改写成下面的格式
// Greeter.jsexportdefaultfunctionf(){vargreet=document.createElement("div");greet.textContent="Hi there and greetings!";console.log("test2");returngreet;}
<!--app.vue--><template><div>{{msg}}</div></template><script>exportdefault{data(){return{msg: 'Hello from vue-loader!'}},}</script>
<style>
div {color: red;}</style>
这里面要注意的是 vue2 开始要用render: (createElement) => createElement(App)来注册组件,components 在 vue1 才能使用了,当然在组件.vue 文件里面注册组件还是可以用 components,
还有需要注意的是 vue2 之后不能在 el 为 body 和 html 节点上添加组件,所以我这里改成el: '#app'
varVue=require("vue");varApp=require("./app.vue");//import App from './app.vue'newVue({el: "#app",render: (createElement)=>createElement(App),/*components: { app: App }*/});
安装 webpack
这里记得一定要全局安装 webpack,不然无法在命令行执行webpack指令
准备阶段
执行后会在根目录生成一个package.json的文件
文件目录结构如下:
3.执行命令打包
当我们在根目录下有上面写好完整的webpack.config.js之后,我们可以在命令行执行webpack执行打包,如果成功就会在 public 文件夹生成一个 bundle.js 文件
当然你还可以在 package.json 自己定义好一个执行命令来代替这些繁琐的命令,例如
加上这句之后
你就可以执行npn run start
还有注意的是,如果不加下面的代码,在调试代码的时候很可能就找不到行数了
加了之后就会显示未合并之前的文件所在行数
未加则显示合并后在 bundle.js 的行数
devtool 选项对应的配置结果
上述选项由上到下打包速度越来越快,不过同时也具有越来越多的负面作用,较快的构建速度的后果就是对打包后的文件的的执行有一定影响
配置服务器
向webpack.config.js文件添加配置项
然后在命令行执行webpack-dev-server
在浏览器打开http://localhost:8080/
就会显示静态页面,如果改动文件,浏览器还会热更新
devserver 配置选项和功能描述
loader
css-loader
webpack 提供两个工具处理样式表,css-loader 和 style-loader,二者处理的任务不同
css-loader使你能够使用类似@import 和 url(...)的方法实现 require()的功能
style-loader将所有的计算后的样式加入页面中,二者组合在一起使你能够把样式表嵌入 webpack 打包后的 JS 文件中
然后我们就可以在webpack.config.js文件里面添加这个 loader 的配置项
注意的是
style-loader
必须在css-loader
之前引入"-loader"其实是可以省略不写的,多个 loader 之间用“!”连接起来
此时我们就可以在 main.js 里面直接引进main.css,那所有样式都会打包成 js,在项目运行的时候会转化为**<style>**标签自动引进原页面中
webpack 只有单一的入口,其它的模块需要通过import,require,url等导入相关位置,为了让 webpack 能找到”main.css“文件,我们把它导入”main.js “中
url-loader
还可以对图片进行打包,用这个还要先安装
配置信息的参数“?limit=8192”表示将所有小于 8kb 的图片都转为 base64 形式(其实应该说超过 8kb 的才使用 url-loader 来映射到文件,否则转为 data url 形式)
babel-loader
webpack 中 babel-loader 转译 ES2015
安装babel-loader,现在我们就可以放心的用 ES6 的语法了
在 webpack.config.js 中添加配置项
可以把上面的代码用 ES6 改写成下面的格式
export与export default均可用于导出常量、函数、文件、模块等,你可以在其它文件或模块中通过 import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用,但在一个文件或模块中,export、import 可以有多个,export default 仅有一个
所以上面是只导出一个函数的情况,如果导出多个可以用下面这种方式
react 下的 babel-loader
在 react 下需要以下几个重要的 babel 文件
.babelrc文件需要添加
react
webpack.config.js下的配置可以写成这样
或者不写.babelrc 文件直接在 webpack.config.js 下这样配置,就是等同于把.babelrc 下的配置换成在 query 参数中配置
vue-loader
vue-loader 能够把我们的组件.vue 文件转化为 js 加载到我们项目中
这里面要注意的是 vue2 开始要用
render: (createElement) => createElement(App)
来注册组件,components 在 vue1 才能使用了,当然在组件.vue 文件里面注册组件还是可以用 components,还有需要注意的是 vue2 之后不能在 el 为 body 和 html 节点上添加组件,所以我这里改成
el: '#app'
webpack.config.js 要添加 resolve 和 vue-loader
file-loader
webpack 加载 css 文件中的 eot,ttf 等格式
可以用来处理 ttf 格式等文件
需要先安装 file-loader
然后配置加载器
sass-loader
编写 sass 格式的文件
配置 webpack.config.js 文件
less-loader
在webpack.config.js修改:
在 module 的 loaders 中,增加了!less-loader
如此便可以在 js 中,require .less 文件
html-webpack-plugin
script、link
动态添加每次编译后的哈希值,防止引用缓存的外部文件问题html-webpack-plugin
可以生成 N 个页面入口uglify-js-plugin
webpack 自带了压缩 JS 的插件,配置如下
DefinePlugin
有时候我们想在 webpack 全局里面定义一个变量,比如用来区分生产环境和开发环境,公共参数和版本号等,我们就可以通过 DefinePlugin 来实现
然后在我们代码里面就可以
其他问题
打包出现以下问题,那是因为一些第三方包用 ES6 语法,在压缩的时候出问题了
解决问题很简单,在根目录下新建
.babelrc
文件进行以下配置,看 webpack 的情况而定,可以配置转 ES5The text was updated successfully, but these errors were encountered: