Webpack打包出现禁止运行脚本的错误

                                                               Webpack的安装和基本使用之“一不小心又跌了个坑”

 

关于webpack:

webpack 是一个模块打包器,主要目的是在浏览器上打包 JavaScript 文件。

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

 

更多解释说明:

webpack中文网:https://www.webpackjs.com

 

webpack特点:

  1. 打包 CommonJs 和 AMD 模块(以及绑定);

  2. 可创建单个或多个按需加载的块,以减少初始加载时间;

  3. 在编译期间会解决依赖关系,减少了运行时的大小;

  4. 加载器可以在编译时预处理文件,如 coffee-script 到 javascript。

 

01、webpack安装

 webpack是基于node的,可以通过node安装命令进行安装。

 

  1. 全局安装webpack的3.6.0版本:

    npm install webpack@3.6.0 -g

    或:npm i webpack@3.6.0 -g

     

  2. 局部安装:

    需要cd到需要webpack的项目的根目录,再执行安装命令。

需要注意的是,一般全局和局部都需要进行安装,因为在终端直接执行命令的时候使用到的是安装好的全局webpack,而在package.json中配置了 "build":"webpack" 之后,执行 npm run build命令使用到的就是局部的webpack

 

02、webpack的基本使用

文件的创建:

新建项目文件夹,在该项目的目录下,建一个src文件夹,用来存放index.js(或main.js)以及其他的一些js、css、less以及图片文件,和一个dist文件夹,这个文件夹用来存放项目打包之后生成的文件。

另外,在其根目录下需要新建一个index.html的文件。

 

基本使用:

    因为index.js(或main.js)是整个项目的入口文件,所以其他组件化、模块化的编写需要在别的js文件中进行,对于用来编写了某个模块或者组件的js文件,需要将其挂载到

module.exports={}中,暴露给index.jsindex.js需要对暴露出来的模块或组件进行接收:const a = require('name')。

a为在index.js中自定义的用于接收某个模块或组件的变量,name为引入的该模块或组件所在的js文件的文件名。

 

项目打包:

    编写好代码之后,通过

    webpack ./src/index.js ./dist/bundle.js

    命令进行打包。

    这里所阐述的意思大概是,需要打包的文件是src目录下的index.js文件,输出的文件是dist文件夹下的bundle.js文件,这个文件不需要手动创建。

    打包成功之后就得到了bundle.js文件,之后在index.html中引入该文件。这里需要注意,每次代码发生改变之后,都需要重新打一次包。

 

03、文件配置

webpack.config.js配置

在项目根目录下新建webpack.config.js文件,我们需要用到path,所以要引入package.json,在终端执行命令npm init -y进行初始化,就可以得到package.json文件,之后开始配置:

 

const path=require('path')

module.exports={

  entry:'./src/index.js',//打包入口

//打包出口

  output:{

 //必须是绝对路径,使用path的resolve方法拼接路径

    path:path.resolve(__dirname,'dist'),

    filename:'bundle.js'  //生成的js文件名

  }

}

配置好之后可以在终端输入webpack进行打包。

 

package.json配置

"scripts": {

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

    "build": "webpack"

  },

 

添加build属性之后,终端运行npm run build进行打包,因为在使用脚手架打包项目上传服务器时,需要使用npm run build进行打包,建议养成使用该命令打包的习惯。

 

 

 

04、打包出错,站坑开始~

 

dist文件夹下的bundle.js文件是不需要手动创建的,它是在你执行了打包命令(webpack ./src/index.js ./dist/bundle.js)

之后,它才会在你的系统中写入这个新的打包文件,这里面就有可能会遇到无法写入的问题:

 

 

    在执行了打包命令之后,出现了禁止运行脚本的问题,确定了不是项目的编写错误或者命令的错误,这时候就要排查一些系统的设置问题了。

 

我找到了这个问题的解决方案,有两个,先来说我亲测有效的一个吧。首先说明,我使用的是vsCode编辑器,使用其他编辑器的就跳过第一步吧。

 

第一步:关掉你的编辑器,重新以管理员的身份运行;

第二步:打开编译器的终端,执行命令get-ExecutionPolicy;

 

这时候显示Restricted,说明是受限的,我们需要做一些修改。继续执行命令set-ExecutionPolicy RemoteSigned;

回车之后,再次执行get-ExecutionPolicy,现在就不是Restricted了,而是允许其进行签名(写入)。

完整的命令过程就是这样:

 

 

设置好之后,个人建议先重启一下再打开项目,之后打包成功。

 

 

方法二是网上大多数人的推荐:

第一步,以管理员身份运行Windows PowerShell

第二步,与第一个方案中输入的命令一样,如图

 

 

 

 

 

好了,问题解决之后就可以愉快地进行打包啦~

 

posted @ 2020-11-05 19:51  罐头公主  阅读(743)  评论(0编辑  收藏  举报