14.webpack学习①

50 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

修改npm包的路径:

1.设置 npm 缓存路径:

npm config set cache "O:\nodereps\node_cache"

2.设置 npm 全局包下载路径:

npm config set prefix "O:\nodereps\node_global"

验证npm安装:

1.npm config list

存在:cache = "O:\nodereps\node_cache"

prefix = "O:\nodereps\node_global"

ok;

1.webpack搭建:(静态模块化打包工具)

webpack -v(检测是否安装webpack)

webpack安装:

npm install webpack@3.6.0 -g (@版本, -g全局安装)

webpack不是内部指令:

  • 确保nodeJS已安装

  • 找到nodejs目录,node_global、node_cache文件夹,没有新建

在用户变量Path中增加:

O:\nodereps\node_global\node_modules

环境变量Path中增加:

O:\nodereps\node_global

关闭cmd命令,重新运行。

局部安装:

开发是依赖,项目打包后不需要:

npm install webpack@3.6.0 --save-dev

2.webpack 使用:

在js中使用模块化开发,

在./src/main.js中导入模块并使用。

然后webpack ./src/main.js ./dist/bundle.js(将 main.js 打包为bundle.js )

在html中引入 bundle.js

--文件夹

----dilt

------bundle.js(打包js)

----src

------main.js(入口js)

------info.js(模块化js)

----index.html(页面html,引入bundle.js)

----webpack.config.json(配置webpack的打包入口和出口,需要npm init 添加node包)

----package.json(npm init 生成的文件)

配置:

webpack.config.json:

创建webpack.config.json文件与根目录:(输入 npm init 会创建出package.json)

const path=require('path')//这里是node的包(马上创建package.json   npm init)

module.exports={

  entry:'./src/main.js',//入口

  output:{//输出口

    path:path.resolve(__dirname,'dist'),//路径(动态获取文件)resolve是在path中的一个方法,__dirname是获取上下文的路径

    filename:'bundle.js'//文夹名

  }

}

将webpack ./src/main.js ./dist/bundle.js 打包方法改为: webpack (省略后面的入口和出口)

package.json:

{

  "name": "meet",

  "version": "1.0.0",

  "description": "index.js",

  "main": "webpack.config.js",

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "build": "webpack"

  },

  "author": "",

  "license": "ISC",

  "dependencies": {

    "webpack": "^3.6.0"

  }

}

在scripts 设置脚本 build: 可以将 webpack 打包命令改为 npm run build

webpack局部安装后:

如果需要使用本地的webpack打包,就在package.json配置脚本,运用npm run build打包(他会先使用寻找本地的webpack,再寻找全局的),若不配置则:node_modules\webpack>webpack ../../src/main.js ../../dist/bundle.js

在终端使用 webpack 命令打包一定使用的是全局的webpack工具。

3.webpack使用css:

require('./css/normal.css')在入口js中导入css文件。

需要先安装loader(是webpack一个非常核心的概念,不同的文件格式 有不同的loader);

npm install --save-dev css-loader 安装css的loader

npm install style-loader --save-dev 安装style的loader

在 webpack.config.js中配置:

module.exports={

  entry:'./src/main.js',//入口

  output:{//输出口

    path:path.resolve(__dirname,'dist'),//路径(动态获取文件)resolve是在path中的一个方法,__dirname是获取上下文的路径

    filename:'bundle.js'//文夹名

  },

  module:{

    rules:[

      {

        test:/\.css$/,

        use: [

          { loader: "style-loader" },

          { loader: "css-loader" }

        ]

      }

    ]

  }

}

添加module属性,创建rules规则。

css打包报错:TypeError: this.getResolve is not a function (css-loader,style-loader版本过高)

手动更改package.json 中版本:

"css-loader": "^3.3.0", "style-loader": "^1.0.0"

npm install 和 npm dev 依次执行

安装JQ:

npm install jquery --save-dev 安装

import $ from 'jquery'; 引入

4.webpack使用less:

在webpack官网上查找 样式 less loader.

npm install --save-dev less-loader less(有两个,一个是 less-loader,一个是less包编译less)

{ test: /\.less$/, use: [{ loader: "style-loader" // creates style nodes from JS strings }, { loader: "css-loader" // translates CSS into CommonJS }, { loader: "less-loader" // compiles Less to CSS }] }

5.webpack使用url链接文件:

在webpack官网上查找 文件 url loader.

npm install --save-dev url-loader

{ test: /\.(png|jpg|gif)$/, use: [ { loader: 'url-loader', options: {

//当文件小于limit (b)配置时,会转换为base64

//当文件大于limit时,需要安装file loader   limit: 8192

fallback: require.resolve('file-loader'),

encoding: "base64",

} } ] }

使用文件时文件大于limit时,需要安装file loader

npm install --save-dev file-loader

{ test: /\.(png|jpg|gif)$/, use: [ { loader: 'file-loader', options: {

//name文件地址,文件名:在打包文件下创建一个img,

//打包后的文件名为:原文件名 + 8位hash值 + 文件扩展名

name: 'img/[name].[hash:8].[ext]'

  } } ] }

它会将文件打包到dilt文件夹中:

所以需要在webpack.config.js中:output:{}增加 publicPath:'dilt/'(//为url路径添加dilt/)

6.webpack es6转为es5:

安装:( babel-loader,babel-core, babel-preset-es2015( babel-preset-env))

npm install babel-loader@7 babel-core babel-preset-es2015 --save-dev

{

   test: /\.js$/,

   exclude: /(node_modules|bower_components)/, //排除

   use: {

   loader: 'babel-loader',

   options: {

   presets: ['es2015']

// presets: ['@babel/preset-env'](会去寻找 .babelrc文件)

   }

   }

}

.babelrc:

{

  "presets": [

    ["env", {

      "modules"false,

      "targets": {

        "browsers": ["> 1%""last 2 versions""not ie <= 8"]//市场份额大于1%,最后两个版本,IE<=8不考虑

      }

    }],

    "stage-2"

  ],

  "plugins": ["transform-vue-jsx""transform-runtime"]

}